爬虫入门实战系列(三):豆瓣电影、图书排行榜爬取实战【Beautifulsoup熟悉续+手动定位标签】

由于楼楼学业繁忙,【相对舒适的爬虫入门系列】在第三回起先更为【不再舒适的爬虫入门系列】(哈哈,不是啦~),先换为【爬虫入门实战系列】叭,以更新实例Code和注释为主,不过前面还是会有具体的代码编写思路、提醒说明哦~


一、豆瓣电影top250榜实战

爬虫入门实战系列(三):豆瓣电影、图书排行榜爬取实战【Beautifulsoup熟悉续+手动定位标签】_第1张图片

站点地址:https://movie.douban.com/top250?start=0

代码编写思路:

1:调库、初始用来存储数据的文本文件路径;照例headers、url、requests.get()、Beautifulsoup(),进行一轮发起访问请求、返回网页编码的解析;

2:定位内容区域,用.find()/.findAll()函数定位目标字段的标签/属性等,打印其中一条记录内容确认,OK后定义个序号变量,把要输出的内容拼接起来

3:然后写for循环,遍历读取页面内的每一条记录,再在外层套上for循环,爬取多页;完成将爬取到的内容写入文件的收尾。


PS:在定位测试爬取单条记录时,可以用Beautifulsoup的.find方法,返回的是定位标签内的首项;而正式爬取时,就用.finAll()方法,得到以列表形式返回的所有项,对其内部进行for...in...遍历,即可进一步提取具体字段(这时因为已经是在列表内逐项遍历了,就用.find()方法了~)。

具体代码:

#调库
import requests
from bs4 import BeautifulSoup

#定义存储路径、请求头里的-用户代理浏览器
file=r'C:\Users\lgb11\Desktop\xiaoshi.txt'  #这是偶的桌面路径哈,试代码要记得换哈~
headers = {'User-Agent': 'Mozilla/5.0 '}

count=0  #编号计数初始化
for i in range(10):   #top榜合计有10页,从0~9遍历
    url='https://movie.douban.com/top250?start='+str(i*25)  #发现每页的url规律是页数乘25个,将这个数字转为字符,拼接在特别缺位的url上,实现url随页码遍历而更新
    html=requests.get(url, headers=headers)  #参数新加了headers
    soup=BeautifulSoup(html.text,'html.parser')  #注意选用的解析方式
    oj=soup.findAll('div',{'class':'item'})  #发现目标内容在
的标签内 for j in oj: inf=j.find('img',{'width':'100'}) #进一步find到标签,里面有目标内容 inf1=inf['alt'] #选取目标属性'alt',获取电影名称内容 inf2=inf['src'] #选取目标属性'src',获取电影详情页面 data=inf1+' , '+inf2 #把内容拼接起来,中间用符号隔开 count=count+1 #计数+1 content=str(count)+': '+data #把计数字符化,继续拼接内容 with open(file,'a') as f: #以只写、追加的方式,进行文件读写 f.write(content+'\n') #写入内容并换行 print('OKK') #写完说声okk~

二、豆瓣图书top250榜实战(继续熟悉操作~)

爬虫入门实战系列(三):豆瓣电影、图书排行榜爬取实战【Beautifulsoup熟悉续+手动定位标签】_第2张图片

站点地址:https://book.douban.com/top250?start=0


代码编写流程:

1:调库,照例headers、url、requests.get()、Beautifulsoup(),进行访问请求发起、返回网页编码的解析;

2:.findAll()定位内容区域,再对返回的标签列表用.find()方法,定位目标字段的标签/属性等;

3:定义序号变量,输出内容拼接好。

具体代码:

import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 '}

count=0
for i in range(10):
    url='https://book.douban.com/top250?start='+str(i*25)
    html=requests.get(url, headers=headers)
    soup=BeautifulSoup(html.text,'html.parser')
    oj=soup.findAll('tr',{'class':'item'})  #初定位,找相同的书目 标签结构,还可以选,注意
不唯一不能用! for i in oj: item1=i.find('div',{'class':'pl2'}).a.attrs['title'] #找div(class为pl2)里的a的'title'属性内容,注意'pl2'前俩是字母 item2=i.find('p',{'class':'pl'}).text.split('/')[0] #作者的文本内容,要用'/'号隔开,并只取第一个 count=count+1 content=str(count)+' : '+item1+'——'+item2 #拼接,打印 print(content)

 

你可能感兴趣的:(python爬虫)