本来想只用BeautifulSoup做的,但是做到网页解析的时候,发现bs4实在是太难操作了,有些节点根本没法选择,无奈只好选择了re,就是re速度很慢。但还是做出来了。
爬去思路是先在url='https://book.douban.com/latest?icn=index-latestbook-all/'上提取每本书的subUrl,然后在用一个each_parse函数解析出书名、作者、出版日期、页数。
以下是源代码:
#write reArticle in CSDN
#文件存储、MongoDB、MySQL
#获取网页源码
import requests
import re
from bs4 import BeautifulSoup
import time
def get_url():
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)' # 'host':'www.toutiao.com'
}
url = 'https://book.douban.com/latest?icn=index-latestbook-all/'
response = requests.get(url=url, headers=headers)
html = response.text
list_url=[]
soup=BeautifulSoup(html,'lxml')
for items in soup.select('.detail-frame'):
name=items.select('a')
for n in name:
list_url.append(BeautifulSoup(str(n),'lxml').a.attrs['href'])
return list_url
def each_parse(url_list_all):
for listOne in url_list_all:
req = requests.get(listOne)
book_parent = re.compile('<div.*?dale_book_subject_top_icon.*?property.*?>(.*?)</span>', re.S)
book_result = re.findall(book_parent, req.text)
author_parent = re.compile('<span.*? 作者.*?href.*?>(.*?)</a>', re.S)
author_result = re.findall(author_parent, req.text)
year_parent = re.compile('<div.*?出版年:.*?</span>(.*?)<br/>', re.S)
year_result = re.findall(year_parent, req.text)
page_parent = re.compile('<div.*?页数:.*?</span>(.*?)<br/>', re.S)
page_result = re.findall(page_parent, req.text)
print('书名:{0}\n作者:{1}\n出版年:{2}\n页数:{3}\n'.format(str(book_result),str(author_result),str(year_result),str(page_result)))
if __name__=='__main__':
print("The programe is running!")
start=time.time()
list_urlX=get_url()
each_parse(list_urlX)
end=time.time()
print("The need of time is %f s" % (end-start))
效果图如下:
书名:['过剩之地']
作者:['[美]莫妮卡·普拉萨德']
出版年:[' 2019-1-1']
页数:[' 436']
书名:['HBO的内容战略']
作者:['(美) 小比尔•梅西(Bill Mesce, Jr.)']
出版年:[' 2019-1']
页数:[' 332']
书名:['文明']
作者:['[英] 肯尼斯·克拉克']
出版年:[' 2019-1']
页数:[' 426']
书名:['念楼学短']
作者:['锺叔河']
出版年:[' 2019-1']
页数:[' 1216']
书名:['场景']
作者:['【加】丹尼尔•亚伦•西尔']
出版年:[' 2019-1']
页数:[' 492']
书名:['一个观点,不一定对']
作者:['黄章晋']
出版年:[' 2019-1-15']
页数:[' 260']
书名:['因计算机而强大']
作者:['[美]西摩 佩珀特 Seymour Papert', '展开']
出版年:[' 2019-1']
页数:[' 304']
书名:['汪曾祺全集(全十二卷)']
作者:['汪曾祺']
出版年:[' 2019-1-10']
页数:[' 4886']
还没有学多线程爬虫,但估计用re也快不到那里去,四十多本书爬了55秒。
2019.2.26