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

Posted Alive

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python爬虫学习:第一爬_快眼看书排行榜相关的知识,希望对你有一定的参考价值。

 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, 
]))
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)

 

以上是关于python爬虫学习:第一爬_快眼看书排行榜的主要内容,如果未能解决你的问题,请参考以下文章

网络爬虫学习——抓取猫眼电影排行

爬虫七夕快到了,想好和女朋友看什么片了吗?来一起用 Python 爬取豆瓣电影分类排行榜

Python爬虫+数据分析:爬一爬那个很懂车的网站,分析一下现阶段哪款车值得我们去冲

Python 爬虫学习3 -简单抓取小说网信息

Python爬一爬网易云音乐

第一爬成功,纪念一下