使用BeautifulSoup时丢失信息

时间:2019-08-16 11:16:21

标签: css python-3.x beautifulsoup css-selectors

我正在遵循“使用Python自动完成无聊的事情”的指南 练习一个名为“项目:“我感觉很幸运” Google搜索”的项目

但是CSS选择器什么也不返回

import requests,sys,webbrowser,bs4,pyperclip
if len(sys.argv) > 1:
    address = ' '.join(sys.argv[1:])
else:
    address = pyperclip.paste()

res = requests.get('http://google.com/search?q=' + str(address))
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text,"html.parser")
linkElems = soup.select('.r a')
for i in range (5):
    webbrowser.open('http://google.com' + linkElems[i].get('href'))**

我已经在IDLE shell中测试了相同的代码

似乎

linkElems = soup.select('.r') 

不返回任何内容

然后我检查了精美汤所返回的值

soup = bs4.BeautifulSoup(res.text,"html.parser")

我发现所有class='r'class='rc'无缘无故。 但是它们在原始HTML文件中。

请告诉我为什么以及如何避免此类问题

1 个答案:

答案 0 :(得分:3)

要获取已定义类year: type: StaticRangeMapper start: '2016' end: '2100' month: type: StaticMonthMapper 的HTML版本,必须在标头中设置r

User-Agent

打印:

import requests
from bs4 import BeautifulSoup

address = 'linux'

headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0'}

res = requests.get('http://google.com/search?q=' + str(address), headers=headers)
res.raise_for_status()
soup = BeautifulSoup(res.text,"html.parser")

linkElems = soup.select('.r a')

for a in linkElems:
    if a.text.strip() == '':
        continue
    print(a.text)