这也是我当初第一次学习爬虫时做的练习,感觉给初学者练笔挺不错的。运用的知识也不是太多,只运用了requests库以及pyquery的相关知识,就算是小白花几个小时也完全可以掌握。
requests库相对于我们以前使用的urllib有着更强大的处理网页能力,大部分操作也更加简便。请求一个网页urllib需要:
import urllib.request response = urllib.request.urlopen('https://www.baidu.com') print(response.read().decode('utf-8'))而requests只需要
import requests response = requests('https://www.baidu.com') print(response.text)是不是明显简便了很多。
pyquery是python的一种解析库,其他比较强大的解析库还有XPath,Beautiful Soup等,这些都可以用来进行网页解析。详细操作我就不再细说了,初学者可以去官网了解。
首先我们利用requests库将网页源码爬取下来,具体代码如下:
import requests from pyquery import PyQuery as pq headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'} def get_request(url): response = requests.get(url, headers=headers) print(response.text) if __name__ == '__main__': url = 'https://www.bilibili.com/ranking?' get_request(url)运行这段代码结果如下: 然后我们只要按下F12分析网页即可 然后根据分析结果利用pyquery编写代码
def pyquery_re(Response): doc = pq(Response) results = doc('.rank-list-wrap .rank-list .rank-item').items() dict1 = {} for result in results: dict1['num'] = result('.num').text() dict1['href'] = result('.info a').attr.href dict1['title'] = result('.info a').text() print(dict1) def get_request(url): response = requests.get(url, headers=headers) pyquery_re(response.text)这里我们把requests请求到的源码通过函数传递给了pyquery进行解析。运行结果如下: 这样每日播放量排名,视频链接和视频名称就都出来了,最后,完整代码如下:
import requests from pyquery import PyQuery as pq headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'} #这里是请求头部,模拟浏览器 def pyquery_re(Response): doc = pq(Response) results = doc('.rank-list-wrap .rank-list .rank-item').items() #这里调用了item()方法得到一个生成器,以便于遍历 dict1 = {} #初始化一个字典暂时存储爬取下来的信息 for result in results: dict1['num'] = result('.num').text() dict1['href'] = result('.info a').attr.href dict1['title'] = result('.info a').text() print(dict1) def get_request(url): response = requests.get(url, headers=headers) #请求网页数据 pyquery_re(response.text) if __name__ == '__main__': #以主函数的方式执行 url = 'https://www.bilibili.com/ranking?' get_request(url)是不是感觉很简单。 当然爬虫不可能这么简单就学会,里面也有很多深奥的东西,有很多反爬措施需要我们去应付,所以,现在开始,一起加油努力吧。 PS:如果看完这个文章想要练手的小伙伴可以去豆瓣读书哦。当然也可以去爬我们官网的今日推荐哦