来自抓取的格式错误的 URL

Posted

技术标签:

【中文标题】来自抓取的格式错误的 URL【英文标题】:Malformed URL from crawl 【发布时间】:2021-08-10 16:22:47 【问题描述】:

我对爬行很陌生。我爬取了一个网页并提取了超链接,然后将其提供给 Apache Nutch 1.18。所有网址均因格式错误而被拒绝。我正在尝试做的是爬取项目数据库页面,提取它们的超链接,然后分别爬取每个页面。

我使用 Scrapy 爬取了数据库页面并将结果保存为 Json 文件。然后我解析 json 文件以提取链接,并将这些链接提供给 Nutch 以对每个页面进行深度抓取。

我已尝试验证这些链接,但我发现它们都是错误的:

def url_check(url):

min_attr = ('scheme' , 'netloc')
try:
    result = urlparse(url)
    if all([result.scheme, result.netloc]):
        print ('correct')
    else:
        print('wrong')
except:
    print ('wrong')

我现在的目标是修复这些链接,以便 Nutch 接受它们。

这是我用来从 JSON 文件中提取链接的代码:

if __name__ == '__main__':
print('starting link extraction')
fname = "aifos.json"
with codecs.open(fname, "rb", encoding='utf-8') as f:
    links_data = f.read()
json_data = simplejson.loads(links_data)

all_links =[]
for item in json_data:
    website = item['link']

有人可以帮忙吗?我尝试了一些建议,但都失败了。

请注意,我并不是要验证这些网址,我已经发现它们是无效的。我正在尝试修复它们。这些 URL 都有效。我已经访问过它们。我现在不确定我的原始抓取代码是否有问题。请看下面。 “链接”对象是我现在遇到的问题。

    def parse_dir_content(self, response):
    items = AifosItem()

    #all_projects = response.css('div.node__content')
    title = response.css('span::text').extract()
    country = response.css('.details__item::text').extract()
    link = response.css('dd.details__item.details__item--long a::attr(href)').extract()
    short_description = response.css('.field.field--name-field-short-description.field--type-text-long.field--label-hidden').extract()
    long_description = response.css('.field.field--name-field-long-description.field--type-text-long.field--label-hidden').extract()
    #long_description = response.css('.node__content--main').extract()

    items['title'] = title
    items['country'] = country
    items['link'] = link
    items['short_description'] = short_description
    items['long_description'] = long_description

    yield items

编辑:-这里的摘要是这样的-如何修复爬虫的格式错误的网址?单击这些 url 时确实有效,但爬虫将它们视为格式错误而拒绝它们,并且当我测试它们时,我得到它们无效的错误。我错过了解析吗?这就是我添加 Scrapy 爬取代码的原因,该代码用于从父页面中提取这些 url。

【问题讨论】:

你的问题不清楚,你的问题是什么? 很抱歉。我以为很清楚。我有一堆通过抓取从页面中提取的网址。我现在想抓取这些网址,但抓取工具已拒绝所有这些网址,并显示它们格式错误。回到原始页面点击这些链接,表明它们实际上指向了我们有兴趣抓取的页面。我的问题实际上是关于需要什么修复才能使我成功抓取这些网站。比如,有没有我做不好的某种解析? 如果您可以举一个“格式错误的网址”和您的日志的示例 这是 URL 的混合 - [traivefinance.com]、[www.ceibal.edu.uy]、[www.talovstudio.com]、[portaltelemedicina.com.br/en/… 这是我从 Apache 得到的错误Nutch,它无法注入用于爬行的网址:- Skipping traivefinance.com:java.net.MalformedURLException: no protocol: traivefinance.com Skipping www.ceibal.edu.uy:java.net.MalformedURLException: no protocol: www.ceibal.edu.uy Skipping www.talovstudio.com:java.net.MalformedURLException: no protocol: www.talovstudio.com 我在这里看到了一个建议 - ***.com/questions/1706493/… 关于如何用 Java 修复它。我正在寻找 Python 版本。 【参考方案1】:

现在已经解决了。在这里找到了修复网址的方法:How can I prepend the 'http://' protocol to a url when necessary?

这修复了 Nutch 中的协议,但我还发现我需要在 nutch 中更新我的 regex-urlfilter.txt,因为我输入了一个使注入器拒绝不匹配的 url 的正则表达式。有点尴尬,那个。

【讨论】:

以上是关于来自抓取的格式错误的 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中验证 url? (格式不正确)

Scrapy:抓取返回数据格式为JSON的网站内容

急!加分!如何获取网页视频中的URL地址?如优酷、腾讯这些在线的URL格式。

使用来自同一 URL 的多个 POST 数据进行抓取

如何修复来自 Apollo 客户端的格式错误的身份验证标头错误

Charles 代理格式错误的请求 url 错误