介绍入门级的网页爬取方法。以爬取歌手信息为例。
研究网页
-
打开谷歌浏览器,按F12,进入开发人员界面
-
选择Elements
-
输入要爬取歌手名称(“周杰伦” 或者 “周杰伦 歌曲”)
-
点击开发人员界面左上角的鼠标标志,在网页页面点击要爬取的内容块,这时,在开发人员界面会定位到相关的h5代码段,这样我们就大体地位到了想要的代码段。下面想获取搜索结果的第一条中的所有信息,可在开发这界面拖动鼠标,在不同位置上网页会有不同显示,这样我们就可以准确定位到我们想要的代码块。
-
可以看到第一条信息所在的代码快位置为 <div class="… id = “1”…>,我们就可以根据这个id号写代码截取信息
Python代码
import requests
import lxml.html as H import sys
import os
import json
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
#'Cookie':'id5AA=c5/nn1vC8o4vZul8i2zJAg==; Hm_lvt_b4a22b2e0b326c2da73c447b951236d6746=1539760959; xxzl_deviceid=F 3hTrG /V/iuVTvmXAxCandrfhokre4OxgMOfI7Tgxtvi1aO/IsvAfVCg7v1KEn;'
}
def get_code(singer_name):
'''
爬虫函数 爬取搜索页面内容
'''
url = 'https://www.baidu.com/s?wd=%s&pn=%s' % (singer_name, 1)
try:
r = requests.get(url, headers=headers)
r.raise_for_status()
r.encoding = r.apparent_encoding
except:
print('网页获取失败')
return keyword,0
else:
code = parse(r.content)
return code
def parse(html):
doc = H.document_fromstring(html)
#h5 = ''.join(doc.xpath('string(.)')) # 输出整个页面信息
xpath1 = '//div[@id="1"]//text()'
id1 = doc.xpath(xpath1)
id1 = ''.join(id1)
print(id1) # 输出第一条结果<div id="1"> 中的所有信息
_xpath = '//div[@id="1"]/h3/a//text()'
datas = doc.xpath(_xpath)
first_title = ''.join(datas)
print(first_title) # 输出第一条标题的信息
_xpath = '//div[@id="1"]/h3/a | //div[@id="2"]/h3/a | //div[@id="3"]/h3/a | //div[@id="4"]/h3/a | //div[@id="5"]/h3/a'
datas = doc.xpath(_xpath)
for data in datas:
title = ''.join(data.xpath('string(.)'))
print(title) # 输出前5条搜索结果的信息
return first_title
def main():
get_code('周杰伦')
if __name__ == '__main__':
main()