b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

正则表达式语法/ Python爬虫:现学现用Xpath爬取豆瓣音乐(5)

电脑杂谈  发布时间:2018-02-09 00:49:40  来源:网络整理

我们也发现了问题每一个xpath路径特别长,能不能精简一下呢?

#####5. 精简一下xpath路径

hrefs = s.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/div/a/@href')
titles = s.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/div/a/text()')
scores = s.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/div/div/span[2]/text()')
numbers = s.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/div/div/span[3]/text()')
imgs = s.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[1]/a/img/@src')

观察发现获取几个关键字段的xpath前缀都是 //*[@id="content"]/div/div[1]/div/table/tr 那我能不能把这些东西提出来呢,让后面的不同的自己去追加,另外这样写也不用管每个页面到底有多少条数据,只管查就行了。所以代码做了一下精简。

url = 'https://music.douban.com/top250'

html = requests.get(url).text
s = etree.HTML(html)
trs = s.xpath('//*[@id="content"]/div/div[1]/div/table/tr')  #先提取tr之前的节点集合

for tr in trs: #遍历tr
    href = tr.xpath('./td[2]/div/a/@href')[0]  #注意新节点是tr下的节点 
    title = tr.xpath('./td[2]/div/a/text()')[0]
    score = tr.xpath('./td[2]/div/div/span[2]/text()')[0]
    number = tr.xpath('./td[2]/div/div/span[3]/text()')[0]
    img = tr.xpath('./td[1]/a/img/@src')[0]
    print href,title,score,number,img

得到的结果和之前是一样的。

但是,但是,这只是一个页面的数据,我现在想爬取多个页面的数据,怎么办呢?

观察一下翻页路径:

https://music.douban.com/top250?start=0

https://music.douban.com/top250?start=25

https://music.douban.com/top250?start=50

有没有发现页面只是后面start参数发生了改变,且增长为每次25,并且250条数据正好是10页。

所以我可以遍历这个页面。

代码:

for i in range(10):
url = 'https://music.douban.com/top250?start={}'.format(i*25)
print url

得到:

https://music.douban.com/top250?start=0
https://music.douban.com/top250?start=25
https://music.douban.com/top250?start=50
https://music.douban.com/top250?start=75
https://music.douban.com/top250?start=100
https://music.douban.com/top250?start=125
https://music.douban.com/top250?start=150
https://music.douban.com/top250?start=175
https://music.douban.com/top250?start=200
https://music.douban.com/top250?start=225

正是自己要的结果。

好了最后我们把代码拼装在一起,并注意每个方法的用途。正则表达式语法/


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-67890-5.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...