如何在Python2.7中创建有效的爬虫程序

如何在Python2.7中创建有效的爬虫程序,python,web-scraping,beautifulsoup,web-crawler,Python,Web Scraping,Beautifulsoup,Web Crawler,我正在抓取一些衣服的网络,以获取它们的价格和每种产品的信息,但根据我的实际算法,需要几天才能完成,并获取每种产品的每个不同链接。例如,如果产品有5种颜色的5个链接,那么它会有5个链接,我有一个92k条目的数据库,只有5k个产品,例如: 相同的产品ID(所以是相同的产品),但链接不同 因此,我需要想法以及如何实施它们来改进这一点,例如,我有产品ID,因此,如果我已经访问了一个包含该ID的链接,我不想再次访问该链接。我想爬过所有的网页,但只访问包含产品的网页。。。但我不知道如何实现这两个想法:/

我正在抓取一些衣服的网络,以获取它们的价格和每种产品的信息,但根据我的实际算法,需要几天才能完成,并获取每种产品的每个不同链接。例如,如果产品有5种颜色的5个链接,那么它会有5个链接,我有一个92k条目的数据库,只有5k个产品,例如:

相同的产品ID(所以是相同的产品),但链接不同

因此,我需要想法以及如何实施它们来改进这一点,例如,我有产品ID,因此,如果我已经访问了一个包含该ID的链接,我不想再次访问该链接。我想爬过所有的网页,但只访问包含产品的网页。。。但我不知道如何实现这两个想法:/

下面是我目前的代码(太慢,重复太多):

例如,在那个爬虫程序中,我使用“#C”一词来知道它是一个产品页面并获取它的信息,但我不知道如何区分该url是否有我已经访问过的产品ID,我也不知道如何避免不相关的url,这就是为什么程序太慢,并且获得很多相同的链接

谢谢你的帮助,任何你能改进的都会很棒的^^

我建议你使用。我的答案是基于它的巨大特点

引用您的疑问:


我不知道如何避免不相关的URL

回答:为了避免访问不相关的URL,您应该根据您的用例使用具有特定逻辑的爬虫程序。也就是说,您可以使用并定义自己的规则,其中每个规则定义了对站点进行爬网的特定行为,这样您就不会访问不相关的URL

以下是一个例子:


…但我不知道如何区分url是否有产品ID 我已经去过了

回答:默认情况下,Scrapy使用
RFPDupeFilter
作为其
DUPEFILTER\u类,用于检测和过滤重复请求
RFPDupeFilter
使用
scrapy.utils.request.request\u fingerprint
功能根据请求指纹进行过滤

这是重复请求的一个粗略日志输出示例:

2015-11-23 14:26:48 [scrapy] DEBUG: Filtered duplicate request: <GET http://doc.scrapy.org/en/latest/topics/request-response.html> - no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates)
2015-11-23 14:26:48[scrapy]调试:已过滤的重复请求:-将不再显示重复项(请参阅DUPEFILTER\u调试以显示所有重复项)


如果您还没有使用过Scrapy,这里有一个Scrapy教程:

您考虑过使用它吗?我对Scrapy有0个想法:/我不知道如何将它转换为Scrapy并添加我正在寻找的规则
2015-11-23 14:26:48 [scrapy] DEBUG: Filtered duplicate request: <GET http://doc.scrapy.org/en/latest/topics/request-response.html> - no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates)