python3 [入门基础实战] 爬虫入门之爬取豆瓣读书随笔页面
话不多说,先上今晚的代码
# encoding=utf8
import requests
import re
from bs4 import BeautifulSoup
# 此处是爬去豆瓣读书的随笔页面
# page=0
# doubarurl = 'https://book.douban.com/tag/%E9%9A%8F%E7%AC%94?start='+str(page)+'&type=T'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400'
,
'Cookie': 'bid=I0klBiKF3nQ; ll="118277"; ap=1; gr_user_id=ffdf2f63-ec37-49b5-99e8-0e0d28741172; _pk_ref.100001.3ac3=%5B%22%22%2C%22%22%2C1498223948%2C%22https%3A%2F%2Fwww.douban.com%2F%22%5D; _vwo_uuid_v2=8C5B24903B1D1D3886FE478B91C5DE97|7eac18658e7fecbbf3798b88cfcf6113; gr_session_id_22c937bbd8ebd703f2d8e9445f7dfd03=9c102dec-1bbc-4abe-ba94-298c209e7fc5; gr_cs1_9c102dec-1bbc-4abe-ba94-298c209e7fc5=user_id%3A0; _pk_id.100001.3ac3=957aa3bc98093993.1498223948.1.1498224184.1498223948.; _pk_ses.100001.3ac3=*'
,
}
def getDouBanHtml(url):
print('url === '+url)
req = requests.get(url, headers)
html = req.text
return html
def parseDouBanHtml(html):
# print(html)
soup = BeautifulSoup(html, 'lxml')
# 标题
main_title_list = soup.findAll('ul',{'class':'subject-list'})
title = soup.findAll('a',attrs={'title':True})
# 出版社
address = soup.findAll('div',{'class':'pub'})
for adress in address:
print(str(adress.string).strip())
print('==='*40)
# 评价
recomends = soup.findAll('span',{'class':'p1'})
for recomend in recomends:
print(str(recomend.string).strip())
print('---'*40)
# 介绍
details = soup.findAll('p')
for detail in details:
print(str(detail.string).strip())
print('^^^^'*40)
# print(title)
for item in title:
print(str(item.string).strip())
print("*"*40)
# for title in main_title_list:
# print(title)
# print(main_title_list)
# 叠加
def diejia(n):
if n == 0:
return 0
else:
return (n-1)*20
print(diejia(0))
# data = getDouBanHtml(doubarurl)
# print(data)
# parseDouBanHtml(data)
for i in range(0,95):
index = diejia(i)
print('i '+str(i)+' pageIndex '+str(index))
doubarurl = 'https://book.douban.com/tag/%E9%9A%8F%E7%AC%94?start=' + str(index) + '&type=T'
print('doubarurl '+doubarurl)
data = getDouBanHtml(doubarurl)
parseDouBanHtml(data)
不错,今晚爬的就是豆瓣的读书随笔页面
说下思路吧:
一开始先把url考过来,然后进行对比,发现
https://book.douban.com/tag/%E9%9A%8F%E7%AC%94?start=20&type=T
每次变化都是start= 后的数字变化的, 现在我们就暂且爬取一页的数据,
用的还是上一次用的requests和bs4 下的 beautifulsoup
困扰很久的是title标签的获取,暂时上传不了图片,就先这样解释一下:
因为title是一个attr,不是一个tag,这个我也是不是大懂,边百度边进行调试的,
title = soup.findAll('a',attrs={'title':True})
这里说的是如果不知道title是什么value 就直接设置为true,这样爬取的就是title下的内容了
还有一个就是 爬完后,得到的并不是标题,而是标题连接一些其他的标签一块给爬出来了。此时我们就用title.string方法得到它的字符串内容,这样就可爬出来
注意一点的是:
每次其他类型转string类型都转不了,我们可以用str(xxx) 或者”“.join(xxx)方法转为string,这种视情况而定。
可能主要还是beautifulsoup 这个库用不熟,本来也不是很熟,这是我第二次爬出来比较简陋的一些数据, 不过比第一次的多了一些
整体思路:
先把整个网页爬取下来,再进行某个字段的爬取,然后进行其他字段的爬取,最后多页进行爬取,这里借鉴了下大才哥的beautifulsoup,确实很详细
存在的缺陷:
爬取的标签还参合着其他东西,例如最后一个p标签爬取内容简介的东西,
爬取下来的留有较大的空格暂时不知道怎么除掉
没有进行文件的存储
总体过程还算是比较好的,虽然豆瓣上显示有那么多,但是实际上豆瓣并没有那么多页数,一共也就50 页, 尴尬ing。。今晚就差不多这样结束吧。工作压力也是挺大的,干活的跟说话的想法确实不一样。
下一篇: 文件制作工具类