爬虫初识

  • 什么是爬虫
    网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略。
  • 爬虫可以做什么
    你可以爬取妹子的图片,爬取自己想看的视频等等,只要你能通过浏览器访问的数据都可以通过爬虫获取。
  • 爬虫的本质是什么
    模拟浏览器打开网页,获取网页中我们想要的那部分数据。

基本流程

  1. 准备工作
    通过浏览器查看分析目标网页。
  2. 获取数据
    通过requests库向目标站点发起请求,请求可以包含额外的header等信息,如果服务器能正常响应,会得到一个Response,便是所要获取的页面内容。
  3. 解析内容
    得到的内容可能是HTML、json等格式,可以用页面解析库、正则表达式等进行解析。
  4. 保存数据
    保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件。

爬虫第一课

这里使用requests模块和BeautifulSoup模块

爬取内容为:豆瓣top250电影的名字、简介、评分及评分人数。

查找信息

进入豆瓣电影Top250,F12审查元素,找到所要爬取的信息都在标签 <div class="info"> 中间,如下图所示。

image-20210314143734029

URL:

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

后面分别为:strat=25,50…分别对应前25部、26 ~ 50部、51 ~ 75部…电影的信息。

User-Agent:

image-20210314145348886

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 导入模块
import requests
from bs4 import BeautifulSoup

def get_movies():
# 添加header
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'}
# 创建存储信息的列表
movie_title=[]
movie_other=[]
movie_info=[]
movie_fen=[]
movie_num=[]
# 遍历每个页面链接并发出GET请求
for i in range(0,10):
link='https://movie.douban.com/top250?start='+str(i*25)
r=requests.get(link,headers=headers)
print('已获取第',str(i*25+1),'到',str(i*25+25),'部电影信息。')
# 获取电影信息
soup=BeautifulSoup(r.text,'lxml')
for t in soup.find_all('div', 'hd'):
name = t.find('span', 'title').get_text()
movie_title.append(name)
for t in soup.find_all('div', 'hd'):
name = t.find('span', 'other').get_text()
movie_other.append(name)
for t in soup.find_all('div', 'info'):
info = t.find('p').get_text().replace(' ','')
movie_info.append(info)
for t in soup.find_all('div', 'star'):
fen = t.find('span', 'rating_num').get_text()
movie_fen.append(fen)
for t in soup.find_all('div','star'):
num = t.find_all('span')[3].get_text()
movie_num.append(num)
return movie_title,movie_other,movie_info,movie_fen,movie_num

a,b,c,d,e=get_movies()
def main():
import codecs
# 将获取信息写入TXT文件
with codecs.open('c:\\Users\\32662\\Desktop\\douban.txt', 'wb',encoding='utf-8') as f:
f.write('豆瓣电影 Top 250\n\n')
for n in range(0,250):
f.write('Top'+str(n+1)+'\n')
f.write('电影名:'+a[n]+b[n]+c[n]+'豆瓣评分'+d[n]+' '+e[n])
f.write('\n\n')

if __name__ == "__main__":
main()

执行结果

image-20210314145621481

image-20210314145657377