环境
requirements:
BeautifulSoup
selenium(with headless Chrome)
pandas
BeautifulSoup用来解释html,用selenium代替requests进行请求(原因后面会讲到),用pandas存储
搜索页url
打开百度学术输入关键字回车后可以看到当前的url是
http://xueshu.baidu.com/s?wd=自然语言处理&rsv_bp=0&tn=SE_baiduxueshu_c1gjeupa&rsv_spt=3&ie=utf-8&f=8&rsv_sug2=0&sc_f_para=sc_tasktype%3D%7BfirstSimpleSearch%7D
翻页后
http://xueshu.baidu.com/s?wd=自然语言处理&pn=10&tn=SE_baiduxueshu_c1gjeupa&ie=utf-8&sc_f_para=sc_tasktype%3D%7BfirstSimpleSearch%7D&sc_hit=1
很容易发现,实质上请求的url应该是http://xueshu.baidu.com/s?wd=自然语言处理&pn=x(x为条数)
复制进地址框中打开发现跟刚才的是一样的,ok
于是可以根据这个规律来构造要请求的url
# 构造请求url
url = 'http://xueshu.baidu.com/s?wd=自然语言处理&pn='
urls = []
for i in range(0, 210, 10):
urls.append(url + str(i))
详情页url
接下来这一部分就有一些难度了。
首先还是老办法用开发者工具看看链接所在的标签
ps:点击开发者工具左上角的鼠标工具可以快速定位页面中的元素!
一开始觉得ok很好办 用request做就行 贴一下用request的代码
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko)'
'Chrome/65.0.3325.162 Safari/537.36'
}
# 请求
html = requests.get(urls[0], headers)
html.encoding = 'utf-8'
soup = BeautifulSoup(html.text, 'lxml')
# print(html.text)
#获取书的详情url
#匹配所有的url
book = soup.find_all(name='a', href=re.compile('/s.*?'),
attrs={
'target': '_blank', 'data-click': "{'button_tp':'title'}"})
books = []
for item in book:
book_url = item.get('href')
books.append