我正在遵循“使用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文件中。
请告诉我为什么以及如何避免此类问题
答案 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)