1 import json
 2 import re
 3 from urllib.request import urlopen    # urllib用法:https://www.jb51.net/article/65279.htm
 4
 5 # 思路:通过url获取网页内容--》匹配需要内容---》拿到内容写入文件
 6
 7
 8 def get_page(url):
 9     """
10     获得网页代码字符串,以便操作
11     :param url: 传入网址
12     :return:  返回utf编码得字符串
13     """
14  # respond对象有一个方法叫着read(),用它读出来是一个bytes类型得数据,需要转码
15     respond = urlopen(url)
16     return respond.read().decode('utf-8')
17 # 如果不用,将返回得是一个对象 <http.client.HTTPResponse object at 0x000001E25553EE10>
18
19 # 将得到的字符串传入,通过正则匹配出需要的内容,返回
20 def parse_page(s_strfile, pattern):
21     """
22     通过正则去匹配传入的字符串,得到想要的内容
23     为节约时间,因为每次都要用相同的正则规则去匹配我想要的内容,故可以将正则配置成一个对象,然后对象通过调用方法查值
24     为节约空间,可用迭代器取值,乘上将对象封装成一个生成器,每次取一个,节约内存
25     :param s_strfile:
26     :return:
27     """
28     # com = re.compile('<td class="s">.*?<a href=.*?>(?P<x_name>.*?)</a>.*?<a href=.*?>(?P<x_title>.*?)</a>'
29     #                   '.*?<td class="t">(?P<x_time>.*?)</td>', re.S)
30     # 两行和一行一样的效果
31     # com = re.compile(
32     #     '<td class="s">.*?<a href=.*?>(?P<x_name>.*?)</a>.*?<a href=.*?>(?P<x_title>.*?)</a>.*?<td class="t">(?P<x_time>.*?)</td>',
33     #     re.S)
34     # 上面是将正则通过方法compile构建成一个对象
35
36     # 先试着通过findall可以全部取出,但很占内存,故查找结果存储,计划构建成一个生成器,一次取一个
37     # page = com.findall(s_strfile)
38     # print(page)
39
40     ret = pattern.finditer(s_strfile)  # 此方法比findall要节省内存,取值用all
41     for i in ret:
42         yield {'name': i.group('x_name'),
43                'title': i.group('x_title'),
44                'time': i.group('x_time')}
45
46
47 def main(page_num, pattern):
48     """
49     接收运行次数及正则规则,写入文件
50     :param page_num:
51     :param pattern:
52     :return:
53     """
54     url = 'http://booksky.99lb.net/sodupaihang/page%s' % page_num
55     response_html_code = get_page(url)
56     ret = parse_page(response_html_code, pattern)
57     with open('xiaoshuo_info.txt', 'a', encoding='utf-8') as f:
58         for data in ret:
59             write_line_str = json.dumps(data, ensure_ascii=False)  # json 为字符串
60             f.write(''.join([write_line_str, '\n']))
61
62
63 # 编译正则规则为一个对象,放在全局变量,只需编译一次即可,省时间
64 pattern = re.compile(
65     '<td class="s">.*?<a href=.*?>(?P<x_name>.*?)</a>.*?<a href=.*?>(?P<x_title>.*?)\
66 </a>.*?<td class="t">(?P<x_time>.*?)</td>',
67     re.S)
68
69 if __name__ == '__main__':
70     for num in range(1, 11):
71         main(num, pattern)

转载于:https://www.cnblogs.com/sunxiuwen/p/9307265.html

python爬虫学习:第一爬_快眼看书排行榜相关推荐

  1. Python爬虫学习笔记 -- 爬取糗事百科

    Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...

  2. Python爬虫学习之爬取淘宝搜索图片

    Python爬虫学习之爬取淘宝搜索图片 准备工作 因为淘宝的反爬机制导致Scrapy不能使用,所以我这里是使用selenium来获取网页信息,并且通过lxml框架来提取信息. selenium.lxm ...

  3. python爬虫学习第一章

    <!DOCTYPE html> python爬虫第一章 python网络爬虫的学习 什么是网络爬虫 按照特定需求,从互联网中搜索有用信息网页进行过滤,就叫网络爬虫. 网络爬虫算法 当浏览信 ...

  4. python爬虫学习一--爬取网络小说实例

    最近疫情猖獗,长假憋在家里实在无聊,早上突然看了一篇python爬虫文章,当场决定试验一下,参照了一下别人的案例,自己各种踩坑捣鼓了好几个小时,终于成功最后把具体步骤和注意点分享给大家: 1.Pyth ...

  5. 为了部落 来自艾泽拉斯勇士的python爬虫学习心得 爬取大众点评上的各种美食数据并进行数据分析

    为了希尔瓦娜斯 第一个爬虫程序 csgo枪械数据 先上代码 基本思想 问题1 问题2 爬取大众点评 URL分析 第一个难题 生成csv文件以及pandas库 matplotlib.pyplot库 K- ...

  6. Python爬虫学习3----xpath爬取哔哩哔哩排行榜

    爬取哔哩哔哩月排行榜,并输出csv格式文件. import requests import lxml.html import csvsource = requests.get('https://www ...

  7. Python爬虫学习之爬取2020年《财富》世界500强排行榜写入txt文件

    import requests from urllib.request import urlopen, Request from bs4 import BeautifulSoup import re ...

  8. python爬虫学习之爬取全国各省市县级城市邮政编码

    实例需求:运用python语言在ip查询 查ip 网站ip查询 同ip网站查询 iP反查域名 iP查域名 同ip域名网站爬取全国各个省市县级城市的邮政编码,并且保存在excel文件中 实例环境:pyt ...

  9. python爬虫学习之爬取超清唯美壁纸

    简介 壁纸的选择其实很大程度上能看出电脑主人的内心世界,有的人喜欢风景,有的人喜欢星空,有的人喜欢美女,有的人喜欢动物.然而,终究有一天你已经产生审美疲劳了,但你下定决定要换壁纸的时候,又发现网上的壁 ...

最新文章

  1. c语言英汉互译编程,用C语言编辑简单英汉互译词典.doc
  2. html前端开发是什么,web前端开发需要会什么
  3. Web应用程序中的Spring JDBC入门
  4. pythonfor循环列表排序_Python使用for循环对列表内元素进行排序方法
  5. 27 PP配置-生产车间控制-工序-定义确认参数
  6. 【翻译】五步快速使用LINQPad尝鲜StreamInsight
  7. 微信小程序swiper滑块视图容器控件使用整理
  8. 如何以用户身份登录MySQL_解析:如何以普通用户的身份运行 MySQL
  9. jdbc连oracle dns报错,近期处理的oracle问题汇总
  10. android菜单更改,Android修改分析:删除设置中菜单
  11. git 还原某个文件到特定版本
  12. pr用什么显卡比较好_用PR软件做后期剪辑,主要需要怎样的主机配置-百度经验...
  13. tenacity -- Python中一个专门用来retry的库
  14. 《Android开发艺术探索》图书勘误
  15. (二)机器学习的流程概述,线性规划,图像分类
  16. R语言使用cph函数和rcs函数构建限制性立方样条cox回归模型、使用ggcoxzph函数可视化进行Schoenfeld残差图检验模型是否满足等比例风险
  17. CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
  18. 【多线程并发编程】十一 生产者和消费者问题(面试必问)
  19. ROCKCHIP 3568平板游戏机移植EMUELC教程(一)
  20. 机器人核心技术运动规划:让机器人想去哪就去哪

热门文章

  1. java结合高德地图Api处理位置信息
  2. .NET框架 Dapper ORM 用法
  3. 前端技巧|JavaScript面向对象编程理解
  4. Swift 波浪动画
  5. 这事真麻烦!备案网站迁移的要注意,不然网站会被判定为空壳网站
  6. 【雷达图】R语言绘制雷达图(ggradar),NBA季后赛数据为例
  7. 计算机网络——共享式以太网
  8. 【谚语】饱暖思淫欲,饥寒起盗心
  9. Ubuntu18.04更换中文界面且中文输入法pinyin不可用打不出汉字解决方法
  10. 深圳证券交易所网络投票业务指南