我在运行此处列出的示例代码时遇到问题:https://dev.to/pranay749254/build-a-simple-python-web-crawler .
这是我试图运行的代码:
import requests
from bs4 import BeautifulSoup
def web(page,WebUrl):
if(page>0):
url = WebUrl
code = requests.get(url)
plain = code.text
s = BeautifulSoup(plain, "html.parser")
for link in s.findAll('a', {'class':'s-access-detail-page'}):
tet = link.get('title')
print(tet)
tet_2 = link.get('href')
print(tet_2)
web(1,'https://www.amazon.com/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=Stomp+box&rh=i%3Aaps%2Ck%3AStomp+box')
当我通过终端shell(我正在运行Ubuntu 16.04)运行上面的代码时,程序不返回任何输出 . 我使用以下命令:
$ python3 BasicCrawler.py
我按下回车键,终端上没有打印文字,就像我没有运行任何脚本一样 . 我能够在程序中添加print()命令来验证它是否正在运行,但它似乎没有打印变量tet或tet2 .
3 回答
它不打印任何东西,因为列表可能是空的 . 这意味着类名“s-access-detail-page”的“a”标记在您正在解析的html doc中不包含任何内容 .
打印HTTP响应的输出,并尝试找出要迭代哪个块并获取数据的确切类 .
您需要传递User-Agent标头 . 此外,对于我使用的方法,您不能在CSS选择器中使用复合类名,因此空格必须替换为“ . ” . 我也完成了相关链接 .
在您的代码中,您需要以下内容:
我的版本:
我进入了shell_plus并用几个打印件运行你的代码:
我发现原始代码没有结果,所以没有输出 . 然后,我将输入更改为findAll只是找到一个标签并得到结果,所以我猜测目标页面此时实际上没有任何带有“s-access-detail-page”类的标签?