Python爬虫入门教程二:爬取静态网页

环境

python:3.7.4

python库:requests-html

IDE:pycharm2019.3版本

浏览器:Chrome最新版

爬取网址: https://movie.douban.com/top250

教程

本次爬取的网页是豆瓣top250,这是一个典型的静态网页,适合入门学习如何爬取需要的内容

静态网页是指一次性加载所有内容,可以直接获取网页的内容

动态网页会在滚动或点击的时候有些地方再加载出来,例如知乎滚动会一直加载新的内容

首先打开网址,按下F12打开开发者模式,切换到Network

正常情况下会没有内容,因为我们页面已经加载好了,现在需要右键标签重新加载或者刷新页面

选中top250,一般第一个就是请求页面的内容,可以清楚的看到请求的方法和网址

跳过中间的响应头,下一个是请求头

我们为了避免被反爬虫检测到,一般采用模拟浏览器的行为,也就是构建请求头

下面附上代码来详细了解一下过程

from requests_html import HTMLSession
def dou_ban():
    session = HTMLSession()  # 创建一个会话
    url = 'https://movie.douban.com/top250'  # 请求的网址
    # 浏览器请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
        'Connection': 'close'
    }
    r = session.get(url=url, headers=headers)       # get请求
    name = r.html.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()')[0]
    print('电影名字:', name)
    score = r.html.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[2]/text()')[0]
    print('评分:', score)
    numbers = r.html.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[4]/text()')[0]
    print('评价人数:', numbers)
dou_ban()   # 函数调用

输出结果

session就是创建一个会话,利用它来进行http请求,url是请求的网址

headers是模仿浏览器头,一般都加上User-Agent表示模拟chrome浏览器避免被检查出来是爬虫,这里加了一个Connection是因为一般默认的连接是keep_alive,也就是长连接,多次运行会导致出现http连接数达到最大值的异常,可能会出现(Max retries exceeded with url ....),如果已经出现了我的解决方法是重启计算机!

根据网页看到是get方法请求,所以利用get方法,返回的是服务器给我们的内容,用text属性可以看到整个html页面

一般我们不会关注整个页面,而是提取我们想要的内容,这里就要利用提取规则,一般对于静态页面有xpath和css选择器等,这里用的是xpath(教程链接: https://www.jianshu.com/p/85a3004b5c06),这里不需要特别学习xpath语法,因为浏览器可以帮助我们快速找到

r.html.xpath表示用xpath提取内容,教程中提取了第一个电影《肖申克的救赎》的名字、评分、评价人数

利用浏览器获取xpath的步骤

1.F12进入开发者模式,点击左上角的箭头

2.点击第一个电影的名字

可以看到右边会显示相应的html代码

3.右键 Copy->Copy XPath,这样就复制了对应的xpath

接下来类比获取评分和评价人数,需要注意的是xpath提取出来的是相关的html元素,文本文字需要在xpath后面加上 /text(),返回值类型是列表,而且只有一个元素,所以是 [0]

值得注意的是现在大多数网页都加入了js代码是动态网页,如果上述方法不能提取到相关的内容表示当前网页是动态网页,需要有一些别的条件才能获取,后面会讲到,但是很多时候都是这样提取的,需要熟练掌握。

 

发布了137 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wh_computers/article/details/104088071