引言:今天周末,想找本电子书看看。发现了一个很好的电子书下载网站。为了以后找书方便,顺便练习一下python3写爬虫,于是就有了今天的小成果,python3爬取电子书网站所有链接。
第一步:网站分析
点击网站的尾页,看看总共有多少网页。如下图:
点击链接,进入任意子页面,要爬取下面的5个框框。
2.开始写代码
先获取每个父页面所有书名链接。
取得页面结构。
根据以上分析,先写代码,拼接出所有的父页面。
if __name__ == "__main__":
try:
pool = multiprocessing.Pool(processes=8)
for i in range(1, 219):
url = "http://www.ireadweek.com/index.php/index/" + str(i)+".html"#这里就是所有父页面
pool.apply_async(get_index_url, args=(url,)) # 维持执行的进程总数为processes,当一个进程执行完毕后会添加新的进程进去
pool.close()
pool.join() # 调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
except:
print(‘abort‘)
然后,获取某一父页面中所有书名链接:
wbdata = requests.get(url, headers=header).content
soup = BeautifulSoup(wbdata, ‘html.parser‘)
links = soup.select(‘html > body > div > div > ul > a‘) #这个是由上面copy selector得到的
然后,拼接子页面来获取子页面的网页内容:
book_page_url = "http://www.ireadweek.com"+page_url
wbdata2 = requests.get(book_page_url, headers=header).content.decode(‘utf-8‘)
soup2 = BeautifulSoup(wbdata2, ‘html.parser‘)
再,在子页面中获取上面的5个框框里面的信息,方法也是如上,书名上鼠标右键->审查元素,得到下图:
于是,得到这样的结构分支: