Python3中的简单网络爬虫不产生输出。什么';发生什么事了?

Python3中的简单网络爬虫不产生输出。什么';发生什么事了?,python,python-3.x,web-scraping,beautifulsoup,web-crawler,Python,Python 3.x,Web Scraping,Beautifulsoup,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")

我在运行此处列出的示例代码时遇到问题:

这是我试图运行的代码:

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')
当我通过终端外壳运行上述代码时(我运行的是Ubuntu 16.04),程序不会返回任何输出。我使用以下命令:

$ python3 BasicCrawler.py

我按enter键,没有文本被打印到终端,就好像我没有运行任何脚本一样。我可以在程序中添加print()命令来验证它是否正在运行,但它似乎没有打印变量tet或tet2

我进入了shell_plus,用几张打印件运行了您的代码:

In [9]: import requests
   ...: from bs4 import BeautifulSoup
   ...: def web(page,WebUrl):
   ...:     if(page>0):
   ...:         print('page is greater than zero')
   ...:         url = WebUrl
   ...:         code = requests.get(url)
   ...:         plain = code.text
   ...:         s = BeautifulSoup(plain, "html.parser")
   ...:         # hmm, no results
   ...:         #for link in s.findAll('a', {'class':'s-access-detail-page'}):
   ...:         # lets try more open query path to see if we get hits
   ...:         for link in s.findAll('a'):
   ...:             print('link: ', link)
   ...:             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')

我发现原来的代码没有结果,所以没有输出。然后,我将输入更改为findAll,以便只查找一个标记并获得结果,因此我猜测目标页面此时实际上没有任何类为“s-access-detail-page”的标记。

它没有打印任何内容,因为列表可能为空。 这意味着类名为“s-access-detail-page”的“a”标记在您正在解析的html文档中不包含任何内容


打印HTTP响应的输出,并尝试找出要在哪个块上迭代和获取数据的确切类

您需要传递一个用户代理头。另外,对于我正在使用的方法,在CSS选择器中不能使用复合类名,所以空格必须替换为“”。我还完成了相关链接

在您的代码中,您需要以下内容:

code = requests.get(url,  headers = {'User-agent': 'Mozilla/5.0'})
我的版本:

import requests
from bs4 import BeautifulSoup

re = requests.get('https://www.amazon.com/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=Stomp+box&rh=i%3Aaps%2Ck%3AStomp+box', headers = {'User-agent': 'Mozilla/5.0'} )
print(re.status_code)
soup = BeautifulSoup(re.content, 'lxml')
base = 'https://www.amazon.com'
links = [(link['title'] ,link['href']) for link in soup.select("a.a-link-normal.s-access-detail-page.s-color-twister-title-link.a-text-normal" )]
links = [(link[0], base + link[1])  if 'slredirect' in link[1] else link for link in links]
print(links)

该URL返回503的状态代码;实际上,它们中没有包含该类的“a”标记。你的测试速度比我快。我建议在尝试for循环之前检查URL的状态代码。如果code.status_code==200: