python - 抓取域列表的登陆页面

标签 python screen-scraping scrapy

我有一个相当长的网站列表,我想下载 登陆(index.html 或同等)页面。我目前正在使用 Scrapy(非常喜欢它背后的人——这是一个很棒的框架)。 Scrapy 在这个特定任务上比我想要的要慢,我想知道考虑到任务的简单性,wget 或其他替代方案是否会更快。有任何想法吗?

(这是我使用 Scrapy 所做的事情。我可以做些什么来优化 scrapy 来完成这项任务?)

所以,我有一个起始网址列表,例如

start_urls=[google.com 雅虎网站 美国在线]

我从每个响应中抓取文本并将其存储在 xml 中。我需要关闭场外中间件以允许多个域。

Scrapy 按预期工作,但似乎很慢(一小时内大约 1000 个或 1 每 4 秒)。有没有办法通过增加 运行单个进程时 CONCURRENT_REQUESTS_PER_SPIDER 的数量 蜘蛛?还要别的吗?

最佳答案

如果您想要一种使用 python 同时下载多个站点的方法,您可以使用如下标准库来实现:

import threading
import urllib

maxthreads = 4

sites = ['google.com', 'yahoo.com', ] # etc.

class Download(threading.Thread):
   def run (self):
       global sites
       while sites:
           site = sites.pop()
           print "start", site
           urllib.urlretrieve('http://' + site, site)
           print "end  ", site

for x in xrange(min(maxthreads, len(sites))):
    Download().start()

您还可以查看 httplib2PycURL 来代替 urllib 来为您下载。

我不清楚您希望将抓取的文本作为 xml 看起来如何,但您可以使用标准库中的 xml.etree.ElementTree 或者安装 BeautifulSoup code> (这会更好,因为它可以处理格式错误的标记)。

关于python - 抓取域列表的登陆页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501838/

相关文章:

python - 使用 BS4 python 进行抓取

python - Scrapy make_requests_from_url(url)

Python Scrapy 不断返回 "Invalid Syntax"

python - 在一个线程中接收套接字数据,在另一个线程中写入数据——python

python - VBA Shell 命令未运行(Python 脚本)

python - Django icontains 多关系查询检索重复行

forms - 网络抓取以填写(和检索)搜索表格?

python - 具有指定范围的最近邻一维数据

python - 剥离网页的不相关部分

python - Scrapy 文件,仅运行初始 start_urls,而不是运行整个列表