分享

Python|爬取书籍信息

 算法与编程之美 2020-08-08

1.前言

爬虫可以有助于快速地从网页中获取想要的信息,从而大大减少工作量今天小编就用实际案例为大家讲解如何爬取网站的一些书籍信息。

2.环境配置

Pycharm,python3,爬虫库requestre模块。

3.爬取目标 

爬虫的一般思路:分析目标网页,确定urlà发送请求,获取响应à解析数据à保存数据。

http://www./so.asp?key=%C9%EE%B6%C8%D1%A7%CF%B0&imgbtn.x=38&imgbtn.y=18

第一步:分析目标网页,整理思路。

分析目标:要爬取的目标是所有的书籍信息,但书籍信息不只是存在当前网页,需要找到所有有书籍信息的网页,并依次去爬取。

找到头部信息:通过浏览器的检查获取到需要的头部信息。

整理思路:先在当前网页找到所有的存放书籍信息的网页,依次爬取网页,再从中获得每本书的具体网页,最后爬取到需要的信息。

具体步骤如下:

第二步,发送请求,获取响应的数据。

获取数据:直接通过request获取,就不再多加阐述,只需要多多注重头部信息。

第三步:解析数据。

转换数据:当获取到网页的text的数据时,会发现乱码,这时需要将它的格式转换为‘gbk’。

截取数据:通过re模块,来截取数据,re模块是python自带的模块,具体的用法,可以上python官网查看。

第四步:保存数据。

可以通过docx模块,创建一个文档并保存。

如下图:

完整代码如下:

import requests
import re
url= 

'http://www./so.asp?key=%C9%EE%B6%C8%D1%A7%CF%B0&imgbtn.x=38&imgbtn.y=18'
 
 header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64;  x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36"
 }
 response = requests.get(url,headers=header)
 response.encoding = "utf-8"
 response.encoding = "gbk"
 # print(response.text)
 books_infos_next = re.findall(r'<a HREF=(.*?) title=',response.text)
 
 
 for n in books_infos_next:
     text = requests.get(n,headers=header)
     response.encoding = "utf-8"
     text.encoding = "gbk"
     # print(text.text)
     books_infos = re.findall(r'<a  href="(.*)" target="_blank"><img src=',text.text)
     books_infos.pop(0)
     # print(books_infos)
     for i in books_infos:
         url1 = "http://www./%s"%  i
         booksrespones =  requests.get(url1,headers = header)
         booksrespones.encoding = 'utf-8'
         booksrespones.encoding = 'gbk'
         # print(booksrespones.text)
         title = re.findall(r'<div  class="h1_title book_head"><p  id="h1">(.*?)</p>',booksrespones.text)
         price = re.findall(r'<p>定  价:(.*?) </p>',booksrespones.text)
         author = re.findall(r'<li><span>作者:(.*?)</span></li>',booksrespones.text)
         isbn = re.findall(r'<li><span>ISBN(.*?)</span></li>',booksrespones.text)
         publication_date = re.findall(r'</li><li><span>出版时间:(.*?)</span></li>',booksrespones.text)
         press = re.findall(r'<li><span>  社:(.*?)</span></li>',booksrespones.text)
         pagination = re.findall(r'<li><span>页码:(.*?)</span></li>',booksrespones.text)
         formats = re.findall(r'<li><span>开本:(.*?)</span></li>',booksrespones.text)
         get_books =  title+author+price+press+publication_date+pagination+formats+isbn
         # print(get_books)
         for i in get_books:
             print(i,end=' / ')
         print('\n')

4.总结

这是一个静态网页的爬取,但相较于一般的静态网页,他的信息不只是单纯的存放于一个网页,需要从这一个网页中去找到其它网页的url并再一次去访问,才能查出所有的结果。最后提醒大家爬虫程序规避网站经营者设置的反爬虫措施或者破解服务器防抓取措施,非法获取相关信息,情节严重的,有可能构成“非法获取计算机信息系统数据罪”。


END

主  编   |   王文星

责  编   |   王   曦

 where2go 团队


微信号:算法与编程之美          

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多