主要内容
poython爬虫第二式以及“跨界”爬
Lxml爬虫和Xpath语法:
首先是Lxml库的使用
from Lxml import etree
res = requests.get(url)
html = etree.HTML(res.text)
Xpath语法中:@ 是选取属性的意思
首先以酷狗音乐网站为例:先以简单的代码来体会一下 “真好!”
from lxml import etree
import requests
import csv
url = 'http://www.kugou.com/yy/rank/home/1-8888.html?from=rank&qq-pf-to=pcqq.group'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
def get_info(url):
res = requests.get(url,headers=headers)
html = etree.HTML(res.text)
infos = html.xpath('//div[@class="pc_temp_songlist "]/ul/li')
for info in infos:
rank_1 = info.xpath('span[3]')[0]
rank = rank_1.xpath('string(.)').strip()
song_singer = info.xpath('a/text()')[0]
time = info.xpath('span[4]/span/text()')[0].strip()
print(rank,song_singer,time)
writer.writerow([rank,song_singer,time])
if __name__ == '__main__':
fp = open('C:/Users/lenovo/Desktop/新建文件夹 (2)/python代码/kugou.csv', 'w', encoding='utf-8', newline='')
writer = csv.writer(fp)
writer.writerow(['rank','song_singer',' time'])
urls = ['http://www.kugou.com/yy/rank/home/{}-8888.html?from=rank'.format(str(i)) for i in range(1, 24)]
for url in urls:
get_info(url)
url=http://www.kugou.com/yy/rank/home/1-8888.html?from=rank&qq-pf-to=pcqq.group是目标网页。
headers的获取就以百度的首页为例:http://www.baidu.com/打开网页,按下F12键,点击上方标签中的Network,之后找到与我相似的代码。下图仅供参考!!!
image.png
其中一个小难点就是这段代码的获取:
image.png
当你右键检查网页的代码时,检索代码时,出现下图所示的情况时,右边此时的代码就是我们需要的代码,将其粘贴复制下来,按照图片的方式写下来:
image.png
选中酷狗网页中你想要的信息右键检查,会出现很多代码,右键copy-copyXpath,粘贴在pycharm中如下图所示('***')中的东西,就是我们需要的。:
image.png
这就是第二种爬取网站信息的方法。
说的可能简单了,我还是多练练吧!!!
下面是跨网页爬取信息 :
网页基本都是这样:点一下里面的文字;数字;图片都会跳转至其他页面,我们同样需要跳转的网页的信息,为了让这些信息连接起来,下面的代码就是为了实现此功能:
本部分以猫眼电影网址为例:(http://maoyan.com/board)
from lxml import etree
import requests
import csv
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
def get_url(url):
res = requests .get(url,headers = headers )
html = etree.HTML(res.text)
infos = html.xpath('//dl[@class ="board-wrapper"]/dd')
for info in infos:
name = info.xpath('div/div/div[1]/p[1]/a/text()')[0]
info_url = 'http://maoyan.com' + info.xpath('div/div/div[1]/p[1]/a/@href')[0]
star = info.xpath('div/div/div[1]/p[2]/text()')[0].strip()
release_time = info.xpath('div/div/div[1]/p[3]/text()')[0]
score_1 = info.xpath('div/div/div[2]/p/i[1]/text()')[0]
score_2 = info.xpath('div/div/div[2]/p/i[2]/text()')[0]
score = score_1 + score_2
get_info(info_url,name,star,release_time,score)
def get_info(url,name,star,time,score):
res = requests.get(url, headers=headers)
html = etree.HTML(res.text)
style = html.xpath('/html/body/div[3]/div/div[2]/div[1]/ul/li[1]/text()')[0]
long_time = html.xpath('/html/body/div[3]/div/div[2]/div[1]/ul/li[2]/text()')[0].split('/')[1].strip()
print(name, star, time, score, style, long_time)
writer.writerow([name, star, time, score, style, long_time])
fp = open('C:/Users/lenovo/Desktop/新建文件夹 (2)/python代码/猫眼跨网页爬取信息.csv','w',encoding= 'utf-8',newline='')
writer = csv.writer(fp)
writer.writerow(['name','star','time','score','style','long_time'])
url = 'http://maoyan.com/board'
get_url(url)
大部分步骤都是一样的,其中跳转的网页,其网址如果我们能获取,那么就方便了。
下个网站的获取如下图,首先是本网页网址+下图中红圈里面的黄色圈中的部分,(黄色圈里面的内容同上面检索的一样,Xpath获取)。
例如: 'http://maoyan.com' + info.xpath('div/div/div[1]/p[1]/a/@href')[0]
image.png
网址都出来,还不简单吗?接下来再好好看看代码。动手敲一遍。
今天学的真的很多!!!明天再好好练一遍!!!
哎呀呀!好累!感觉会的好少啊!!!不过起码对这个很感兴趣,想想这些功能就觉着好NB!!!
认真看,认真学 ————真好!!!
image
吐槽
今天才周二,距离休息还有......呃......不算了,脑子不想转了!!!
庆幸的是在如此期待休息的日子中,学习了一些新的东西,起码不像以前那样“梦游”了!