当前位置:   article > 正文

python爬虫练习1之豆瓣电影top250爬取

python爬虫练习1之豆瓣电影top250爬取

如何用python Request发送请求

import requests
response=requests.get("http://books.toscrape.com/')
print(response)
print(response.status_code)
  • 1
  • 2
  • 3
  • 4

图片: Alt
如果状态码等于200,说明请求成功

如果是404则要检查传入的URL是否存在问题。

import requests
response=requests.get("http://books.toscrape.com/")
if response.ok:
   print(response.text)                  #获取响应内容
else:
   print("请求失败")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

请求成功则打印text网页结果
请求成功则打印text网页结果

传入head进行修改

想指定某些信息进行更改可传入head进行修改
如:可以帮我们把爬虫程序伪装成正常浏览器

用python requests拿到豆瓣源码

import requests
response=requests.get("https://movie.douban.com/top250")
print(response.status_code)
  • 1
  • 2
  • 3

获取失败,如下图所示
在这里插入图片描述
豆瓣回应爬虫,它希望服务正常的浏览器,忽略所有爬虫的请求
可以通过定义请求头,把程序伪装成浏览器
新建一个headers的字典变量

headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36"
}
  • 1
  • 2
  • 3

user-Agent 里面的值可随便查看一个浏览器审查元素->查看网络->复制一个user-Agent的值
在这里插入图片描述
运行后状态码为200,说明正常

在这里插入图片描述
同时打印反馈的文本内容,成功获取豆瓣的网页内容,如下图:
在这里插入图片描述
但是html内容看的一头雾水,还需要进一步操作

html常见标签

h1一级标题
h2二级标题
p文本标签
img图片
href链接
ol有序列表,里面每个元素用li 标签
table 表格
class定义属性

Beautiful Soup库用于解析网页内容

在这里插入图片描述
审查电影名的元素,发现名字都是在span里面,属性class都是title
因此构造解析的代码如下:

from bs4 import BeautifulSoup
import requests
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36"
}
response=requests.get("https://movie.douban.com/top250",headers=headers)
html=response.text
soup=BeautifulSoup(html,"html.parser")
all_titles=soup.findAll("span",attrs={"class":"title"})
for title in all_titles:
    print(title)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

解析后如下图
在这里插入图片描述
通过string属性可以把span标签剔除,通过选择不含“/”的获得中文电影名

from bs4 import BeautifulSoup
import requests
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36"
}
response=requests.get("https://movie.douban.com/top250",headers=headers)
html=response.text
soup=BeautifulSoup(html,"html.parser")
all_titles=soup.findAll("span",attrs={"class":"title"})
for title in all_titles:
    title_string=title.string
    if "/" not in title_string:
        print(title_string)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

如下图,可知获取排行榜成功。
在这里插入图片描述
但是只获取到一页,如何获取多页呢?

如何获取多页排行榜?

在这里插入图片描述

在这里插入图片描述
通过观察第一页和第二页,只有在start上有变化 由0变成了25
同理第三页start变成了50
所以要创建一个变量使其可以从0,25,50一直到250

from bs4 import BeautifulSoup
import requests
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36"
}
for start_num in range(0,250,25):

    response=requests.get(f"https://movie.douban.com/top250?start={start_num}",headers=headers)
    html=response.text
    soup=BeautifulSoup(html,"html.parser")
    all_titles=soup.findAll("span",attrs={"class":"title"})
    for title in all_titles:
       title_string=title.string
       if "/" not in title_string:
        print(title_string)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

如下图可知成功获取了豆瓣电影top250
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/191194
推荐阅读
相关标签
  

闽ICP备14008679号