# import requests,re,json # # 定义一个函数用来请求当当网的网页信息 # def request_dangdang(url): # try: # # 使用get请求 # response = requests.get(url) # # 判断返回的状态码是否为200 # if response.status_code == 200: # # 返回接受的文本 # return response.text # # 若访问出现错误,就返回空 # except requests.RequestException: # return None # # 定义函数用来解析访问当当网收到的文本文件 # def parse_text(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><span\sclass="price_n">¥(.*?)</span>.*?</li>', # re.S # ) # # 找出所有的书本信息 # results = re.findall(pattern,html) # for result in results: # # 用生成器的方式生成数据 # yield{ # "range":results[0], # "image":results[1], # "title":results[2], # "recommend":results[3], # "author":results[4], # "times":results[5], # "price":results[6] # } # # 将解析到的数据写入文件中 # def write_to_file(result): # print("准备开始,写入数据 ====>" + str(result)) # with open("book.txt",'a',encoding = "utf-8") as f: # f.write(json.dumps(result,ensure_ascii=False) + '\n') # # 主函数 # def main(page): # url = 'http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-' + str(page) # # 获取当当网的页面 # html = request_dangdang(url) # print("获取网页成功") # # 解析出我们想要的信息 # results = parse_text(html) # print("解析信息成功") # # 然后将信息依次写入 # for result in results: # write_to_file(result) # print("写入信息成功") # # if __name__ == "__main__": # for index in range(1,26): # print(index) # main(index) import requests import re import json 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): print("正则表达式") 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><span>\sclass="price_n">¥(.*?)</span>.*?</li>', '<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><span class="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] } 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) + '\n') 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) # print(html) # print("请求网页成功") items = parse_result(html) # 解析过滤我们想要的信息 # print("解析网页成功") for item in items: # print("开始写入数据") write_item_to_file(item) if __name__ == "__main__": # 循环爬取26页 for i in range(1,26): main(i)
当前位置:
首页 > temp > python入门教程 >
-
01爬取当当网500本五星好评书籍
出处:https://www.cnblogs.com/cong12586/p/13221481.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数