zoukankan      html  css  js  c++  java
  • python爬虫06取当当网 Top 500 本五星好评书籍

    主要思路

     

    使用 page 变量来实现翻页

     

    我们使用 requests 请求当当网

     

    然后将返回的 HTML 进行正则解析

     

    由于我们暂时还没学到数据库

     

    所以解析完之后就把内容存到文件中

     

    def main(page):
       url = 'http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-' + str(page)
       html = request_dandan(url)
       items = parse_result(html) # 解析过滤我们想要的信息
       
       for item in items:
           write_item_to_file(item)

    请求当当网

     

    当我们请求成功之后

     

    拿到源代码

     

    def request_dandan(url):
       try:
           response = requests.get(url)
           if response.status_code == 200:
               return response.text
       except requests.RequestException:
           return None

     

     

    拿到源代码了

     

    就要对其解析

     

    使用正则表达式获取我们想要的关键信息

     

    获取到了之后我们封装一下数据

     

    def parse_result(html):
       pattern = re.compile('<li>.*?list_num.*?(d+).</div>.*?<img src="(.*?)".*?class="name".*?title="(.*?)">.*?class="star">.*?class="tuijian">(.*?)</span>.*?class="publisher_info">.*?target="_blank">(.*?)</a>.*?class="biaosheng">.*?<span>(.*?)</span></div>.*?<p><spansclass="price_n">&yen;(.*?)</span>.*?</li>',re.S)
       items = re.findall(pattern,html)
       for item in items:
           yield {
               'range': item[0],
               'iamge': item[1],
               'title': item[2],
               'recommend': item[3],
               'author': item[4],
               'times': item[5],
               'price': item[6]
           }

     

     

    打印一下看看结果

     

    for item in items:
           print(item)

     

    可以看到这样的数据

    现在我们获取的是第 1 页的数据

     

    如何自动获取 25 页 500 条数据呢

     

    来个 for 循环呗

     

    if __name__ == "__main__":
       for i in range(1,26):
           main(i)

     

     

    获取完 500 本书的数据之后

     

    存到 book.txt 文件

     

     

    def write_item_to_file(item):
       print('开始写入数据 ====> ' + str(item))
       with open('book.txt', 'a', encoding='UTF-8') as f:
           f.write(json.dumps(item, ensure_ascii=False) + ' ')
           f.close()

     

     

    完成

     

    项目跑起来

     

     

     

    打开我们存储的 book.txt 看

     

    前 500 本书的数据就被我们拿到啦

  • 相关阅读:
    cocos2dx android java调用C++
    cocos2dx android c++调用java
    cocos2dx android collection
    cocos2dx学习之windows android环境搭建
    windows phone 8.0 与 windows phone7.1区别
    C#文件同步工具教程
    Web2.0时代,RSS你会用了吗?(技术实现总结)
    介绍一篇关于session的好文章,写的很详细(jspservlet 技术)
    利用HttpModuler实现WEB程序同一时间只让一个用户实例登陆
    css
  • 原文地址:https://www.cnblogs.com/hrnn/p/13307064.html
Copyright © 2011-2022 走看看