学校开了一周的Python课,上个暑期的时候自己看了崔庆才的python3网络爬虫开发实战,但是很多都没有理解,只是初步了解了很多概念,很多实战的东西自己看完都比较虚,尤其是从头开始看那本书时,是从urllib这个库开始的,后来又安装了requests库,总的来说是当你学完一个东西并且敲了很多代码后,发现事实上有很多轮子都造好了…你可以用更方便的库去写代码,这样效率更高也更简单。
但是事实上这些简单的库可能会用的更熟练,我们学的目的首先是要解决问题然后再是提高效率。
所以学python还是建议安装Anaconda3,虽然很大,但是后续安装各种库都非常方便,而且原生的
python有些库是不支持的。
先上代码
import re
import urllib.request
import urllib.parse
import csv
reg = ‘
.
?title="(.?)".
?class=“star”>(.?)
.
class=“releasetime”>(.?)’
class QueryRank() :
def init(self) :
self.headers = {
“User-Agent”: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
“Chrome/75.0.3770.100 Safari/537.36” }
self.base_url = “ https://maoyan.com/board/4?offset=”
def deal_url(self) :
for i in range(0, 100, 1) :
url = self.base_url + str(i)
req = urllib.request.Request(url, headers = self.headers)
res = urllib.request.urlopen(req)
html = res.read().decode(“utf-8”)
pattern = re.compile(reg, re.S)
result_rank = re.findall(reg, html, re.S)
param = result_rank[0]
param1 = param[0].strip()
param2 = param[1].strip()
param3 = param[2].strip()
print(param1, param2, param3)
result_list = [param1, param2, param3]
with open(“rank.csv”, “a”, newline = “”, encoding = ‘ansi’) as f :
writer = csv.writer(f, dialect = “excel”)
writer.writerow(result_list)
rank = QueryRank()
rank.deal_url()
然后分析思路。
大致可以分为4个部分
1观察源码写正则
如果是要爬取多页的话可以看地址栏注意参数的变化
这是第一页跟第二页的地址栏的参数的变化,再翻几页后可以知道这里的board4指的是top100榜单,而这个offset的值的变化是0-100,就翻页来看的话是10个10个变化,但事实上你自己输入的话可以这个可以一个个变化,也就是说分别对应着100榜单中的每一个电影,分析完之后就可以开始第二部
2爬取源码
3根据一开始的分析的参数的变化进行url拼接方便每一次爬
4抓取每一次想要的信息并保存****
首先是用浏览器打开网站然后按F12进入开发者模式
此处的标记非常重要,标记的地方选中后,鼠标可以拖到左边的web部分,选中相应的部分就可以直接跳转到对应的HTML代码,(这个书上是没有讲的,知道这个之后,爬这些东西就会方便多了,至少写正则会方便很多)
正则表达式不是唯一的,可以写的稍微详细一点,需要特别注意的就是贪婪匹配和非贪婪匹配,很多时候出问题,都是因为没有用非贪婪匹配.*?