用python的靓汤抓取文本-为什么赢了';批量地址工作

用python的靓汤抓取文本-为什么赢了';批量地址工作,python,beautifulsoup,Python,Beautifulsoup,我正试图用python的靓汤来搜索3000多个网站。我的代码为大约50个网站工作,但如果我同时运行1000或3000+的话,代码就会被卡住 奇怪的是,这段代码不适用于多个网站,我想听听关于如何解决这一问题的建议。这是正常的,还是有别的办法 当我运行1000时,即使在6或7个小时后,它也不会提供任何结果,所以我怀疑代码根本不起作用。我想听听你的意见 代码: 如果您的代码适用于50个网站,则有两种可能性: (1) 列表中有一个链接包含的数据不是代码所期望的数据。 (2) 您正在耗尽资源。 让程序报告

我正试图用python的靓汤来搜索3000多个网站。我的代码为大约50个网站工作,但如果我同时运行1000或3000+的话,代码就会被卡住

奇怪的是,这段代码不适用于多个网站,我想听听关于如何解决这一问题的建议。这是正常的,还是有别的办法

当我运行1000时,即使在6或7个小时后,它也不会提供任何结果,所以我怀疑代码根本不起作用。我想听听你的意见

代码:


如果您的代码适用于50个网站,则有两种可能性: (1) 列表中有一个链接包含的数据不是代码所期望的数据。 (2) 您正在耗尽资源。 让程序报告要扫描的链接和时间戳。
如果输出刚刚停止,那么最后一个链接就是问题所在。如果时间戳之间的距离越来越远,那么资源就是问题所在。

您是否检查过自己是否被IP或其CDN/防火墙阻止?添加一些打印语句以查看卡住的地方。一种方法是在每行之间添加一个,让他们打印出1到。。。n@Lexxxxx你能说得更具体些吗?我如何告诉python打印它卡住的地方?在第一个for循环中添加
print(1)
print(2)
print(3)
,等等。。每行之后(当然要考虑正确的缩进)。这样,控制台将显示输出(例如1、2、3、1、2、3),您可以看到它在代码中停止运行的位置。也可能是@BoarGules指定的
print(myurl)
。我找到了一种打印链接和时间戳的方法,似乎刮取的大约时间是5秒。如果时间太长,有没有办法强制代码停止?例如,我可以添加这样的内容,如果链接花费的时间超过15秒,则停止。您可以在urlopen()上设置超时
html=urllib2.urlopen(myurl,超时=5)。read()
import csv
d = csv.DictReader(open('file.csv', 'rU'))

soc = []
for row in d:
    soc.append(row)

import sys
reload(sys)
sys.setdefaultencoding('utf8')

from bs4 import *
import time
import requests
import urllib2

# create lists
mega = []
mega2 = []
mega3 = []


for i in range(len(soc)): # all links, about 3000
    myurl = soc[i]['report_url']
    try:
        html = urllib2.urlopen(myurl).read()
    except urllib2.HTTPError, error: 
        continue
    except urllib2.URLError, error:
        continue
    soup = BeautifulSoup(html, "html.parser")
    row = soup.findAll('tr')
    for r in row:
        mega.append([r.get_text()]) # force all raw text into a list in list
        mega2 = [x[0] for x in mega]
    mega3.append(mega2)
    time.sleep(2)