网页中flash数据抓取(定制Requests有些网页的获取请求方法及注意事项!!)

优采云 发布时间: 2022-03-02 15:14

  网页中flash数据抓取(定制Requests有些网页的获取请求方法及注意事项!!)

  内容

  在网站的设计中,纯HTML格式的网页通常被称为静态网页,早期的网站一般都是由静态网页构成。在静态网页抓取中,有一个强大的 Requests 库,可让您轻松发送 HTTP 请求。

  1 获取响应内容

  在Requests中,常用的功能是获取网页的内容。

  import requests

r = requests.get('https://www.baidu.com/')

print("文本编码:", r.encoding)

print("响应状态码:", r.status_code)

print("字符串方式的响应体:", r.text)

  笔记:

  2 自定义请求

  有些网页需要设置Requests的参数来获取需要的数据,包括传递URL参数、自定义请求头、发送POST请求、设置超时时间等。

  2.1 传递URL参数

  为了请求特定的数据,我们需要在 URL 的查询字符串中收录一些数据。如果您自己构建 URL,则数据通常后跟一个问号,并作为键/值放置在 URL 中。

  在 Requests 中,这些参数可以直接存储在字典中,并通过 params(参数)内置到 URL 中。

  import requests

key_dict = {'key1': 'value1', 'key2': 'value2'}

r = requests.get('http://httpbin.org/get', params=key_dict)

print("URL已经正确编码:", r.url)

print("字符串方式的响应体:\n", r.text)

  2.2 自定义请求头

  请求标头标头提供有关请求、响应或其他发送实体的信息。对于爬虫来说,请求头非常重要。如果未指定请求头或请求的请求头与实际网页不一致,则可能无法返回正确的结果。

  请求不会根据自定义请求头的具体情况改变其行为,但在最终请求中,所有请求头都会被传入。

  如何获取请求标头:

  使用 Chrome 的“检查”命令。使用Chrome浏览器打开要请求的网页,在网页任意位置单击鼠标右键,在弹出的快捷菜单中点击“检查”命令。

  在打开的页面中单击网络选项。

  

  图 1 单击网络选项

  在左侧的请求资源中找到您需要请求的网页,(如果没有,请点击网页左上角的刷新按钮),以本例为例。点击要请求的网页,可以在Headers中看到Requests Headers的详细信息。

  

  图2 找到需要请求的网页的头部信息

  因此,我们可以看到请求头中的信息是:

  

  图3 请求网页的头部信息

  要提取请求标头的重要部分,您可以将代码更改为:

  import requests

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36',

'Host': 'www.santostang.com'}

r = requests.get('http://www.santostang.com/', headers=headers)

print("响应状态码:", r.status_code)

  2.3 发送 POST 请求

  除了 GET 请求之外,有时还需要发送一些以表单形式编码的数据。比如登录的时候,请求是POST,因为如果使用GET请求,会在URL中显示密码,非常不安全。如果要实现 POST 请求,只需将字典传递给 Requests 中的 data 参数,请求时数据字典会自动编码为表单。

  可以看到,form变量的值就是key_dict中输入的值,所以POST请求发送成功。

  2.4 超时

  有时,爬虫遇到服务器很长时间不返回,这意味着爬虫程序会一直等待,导致爬虫程序执行不顺畅。因此,可以使用 Requests 在 timeout 参数设置的秒数过去后停止等待响应。

  import requests

link = "http://www.santostang.com/"

r = requests.get(link, timeout=0.001)

  3 请求爬虫实践:TOP250电影数据

  本次项目的目的是获取豆瓣电影Top 250中所有电影的名称。网址是:豆瓣电影Top 250。在这个爬虫中,请求头是根据实际浏览器定制的。

  3.1 网站分析

  按照2.2中的方法提取重要的请求头。

  第一页只有 25 部电影,如果要获取全部 250 部电影,则需要获取总共 10 页的内容。

  通过点击第二页,可以发现页码地址变成了

  点击第三页发现页码地址是

  即每增加一个页面,网页地址的起始参数加25。

  3.2 项目实战

  通过以上分析可以发现,使用requests获取电影网页的代码,并使用for循环进行翻页,代码如下:

  import requests

def get_movies():

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36',

'Host': 'movie.douban.com'}

for i in range(0, 10):

link = 'https://movie.douban.com/top250?start=' + str(i * 25) + '&filter='

r = requests.get(link, headers=headers, timeout=10)

print('第', str(i + 1), '页响应状态码: ', r.status_code)

print(r.text)

get_movies()

  运行上面的代码,结果是:page 1 response status code: 200

  这时得到了生成的知识网页的HTML代码,我们需要从中提取出想要的电影名称。代码如下:

  import requests

from bs4 import BeautifulSoup

def get_movies():

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36',

'Host': 'movie.douban.com'}

movie_list = []

for i in range(0, 10):

link = 'https://movie.douban.com/top250?start=' + str(i * 25) + '&filter='

r = requests.get(link, headers=headers, timeout=10)

print('第', str(i + 1), '页响应状态码: ', r.status_code)

soup = BeautifulSoup(r.text, 'lxml')

div_list = soup.find_all('div', class_='hd')

for each in div_list:

movie = each.a.span.text.strip()

movie_list.append(movie)

return movie_list

movies = get_movies()

print(movies)

  参考

  [1] 唐松.2019.Python网络爬虫从入门到实践(第2版)[M]. 北京:机械工业出版社

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线