zoukankan      html  css  js  c++  java
  • 爬取豆瓣书籍信息

    最近在看崔老师的爬虫课程,跟着课程上的爬豆瓣书籍信息,看视频很快,但是到自己这边执行就非常慢,大概执行两小时才爬下十几行数据,这是不能忍受的,发现使用re_complile不知在哪卡着就非常慢,所以使用曲线方式,先抓取要爬的html部分,分步骤用re_compile来过滤,这个时候就快很多了,具体代码如下:

     1  
     2 
     3 #!/usr/bin/env python
     4 # -*- coding:utf-8 -*-
     5 import re
     6 import time
     7 import requests
     8 from requests.exceptions import RequestException
     9 from bs4 import BeautifulSoup
    10 
    11 
    12 print(time.asctime())
    13 
    14 def get_page(url):
    15     try:
    16         content = requests.get(url)
    17         if content.status_code == 200:
    18             return content.text
    19         return None
    20     except RequestException:
    21         return None
    22 
    23 def parse_page(html):
    24     soup = BeautifulSoup(html,'lxml')
    25     data = soup.select('.slide-list .info')        #css选择器将html中info标签下取出
    26     for html2 in data:
    27         pattern = re.compile(
    28             '<div.*?href="(.*?)".*?title="(.*?)".*?more-meta.*?author">(.*?)</span>.*?year">(.*?)</span>.*?</div>',
    29             re.S)
    30         items = re.findall(pattern,str(html2))    #由于HTML2类型为bs4.element.Tag的,在这需要转成str才能findall出来
    31         for item in items:
    32             yield {
    33                 'index': item[0],
    34                 'book': item[1],
    35                 'author': item[2],
    36                 'date': item[3]
    37             }
    38 
    39 
    40 def main():
    41     url = 'https://book.douban.com/'
    42     html = get_page(url)
    43     for  data  in parse_page(html):
    44         print(data)
    45 
    46 
    47 if __name__ == '__main__':
    48     main()
  • 相关阅读:
    Laravel路由除了根目录全报404错误
    jQuery源码分析之整体框架
    JS进阶系列之this
    JS进阶系列之原型、原型链
    原生JavaScript实现的贪吃蛇
    html文档流和事件流
    (转)mysql执行计划分析
    (转)重定向和转发区别
    el表达式取值优先级
    (转)性能测试基本指标
  • 原文地址:https://www.cnblogs.com/shuihuaboke/p/8808926.html
Copyright © 2011-2022 走看看