gpt4 book ai didi

python - 加速网页抓取工具

转载 作者:太空狗 更新时间:2023-10-29 17:02:12 26 4
gpt4 key购买 nike

我正在使用 scrapy 使用非常简单的网络抓取工具抓取 23770 个网页。我对 scrapy 甚至 python 都很陌生,但设法编写了一个可以完成这项工作的蜘蛛。但是,它确实很慢(抓取 23770 个页面大约需要 28 小时)。

我查看了 scrapy 网页和邮件列表以及 stackoverflow,但我似乎找不到编写初学者可以理解的快速爬虫的通用建议。也许我的问题不是蜘蛛本身,而是我运行它的方式。欢迎所有建议!

如果需要,我在下面列出了我的代码。

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item, Field
import re

class Sale(Item):
Adresse = Field()
Pris = Field()
Salgsdato = Field()
SalgsType = Field()
KvmPris = Field()
Rum = Field()
Postnummer = Field()
Boligtype = Field()
Kvm = Field()
Bygget = Field()

class HouseSpider(BaseSpider):
name = 'House'
allowed_domains = ["http://boliga.dk/"]
start_urls = ['http://www.boliga.dk/salg/resultater?so=1&type=Villa&type=Ejerlejlighed&type=R%%C3%%A6kkehus&kom=&amt=&fraPostnr=&tilPostnr=&iPostnr=&gade=&min=&max=&byggetMin=&byggetMax=&minRooms=&maxRooms=&minSize=&maxSize=&minsaledate=1992&maxsaledate=today&kode=&p=%d' %n for n in xrange(1, 23770, 1)]

def parse(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select("id('searchresult')/tr")
items = []
for site in sites:
item = Sale()
item['Adresse'] = site.select("td[1]/a[1]/text()").extract()
item['Pris'] = site.select("td[2]/text()").extract()
item['Salgsdato'] = site.select("td[3]/text()").extract()
Temp = site.select("td[4]/text()").extract()
Temp = Temp[0]
m = re.search('\r\n\t\t\t\t\t(.+?)\r\n\t\t\t\t', Temp)
if m:
found = m.group(1)
item['SalgsType'] = found
else:
item['SalgsType'] = Temp
item['KvmPris'] = site.select("td[5]/text()").extract()
item['Rum'] = site.select("td[6]/text()").extract()
item['Postnummer'] = site.select("td[7]/text()").extract()
item['Boligtype'] = site.select("td[8]/text()").extract()
item['Kvm'] = site.select("td[9]/text()").extract()
item['Bygget'] = site.select("td[10]/text()").extract()
items.append(item)
return items

谢谢!

最佳答案

这里有一些可以尝试的东西:

  • 使用最新的 scrapy 版本(如果还没有使用的话)
  • 检查是否使用了非标准中间件
  • 尝试增加CONCURRENT_REQUESTS_PER_DOMAINCONCURRENT_REQUESTS设置(docs)
  • 关闭日志记录 LOG_ENABLED = False ( docs )
  • 尝试在循环中yield一个项目,而不是将项目收集到items列表中并返回它们
  • 使用本地缓存 DNS(参见 this thread)
  • 检查此站点是否使用下载阈值并限制您的下载速度(参见 this thread)
  • 记录蜘蛛运行期间的 CPU 和内存使用情况 - 查看那里是否有任何问题
  • 尝试在 scrapyd 下运行同一个蜘蛛服务
  • 看看是否grequests + lxml会表现得更好(询问您是否需要实现此解决方案的任何帮助)
  • 尝试在 pypy 上运行 Scrapy,参见 Running Scrapy on PyPy

希望对您有所帮助。

关于python - 加速网页抓取工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17029752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com