元素包裹起来,因此只要解析每一个
元素中的内容,就可以获取当页的电影信息了
23
9.2
以上为复制出来的一个标签中所包含的内容,然后根据其中的内容编写正则表达式
.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?).*?star.*?>(.*?).*?releasetime.*?>(.*?).*?integer.*?>(.*?).*?fraction.*?>(.*?).*?
.*?
的含义为以非贪婪(即尽可能少的匹配)的方式匹配任意数量的任何字符
(.*?)
其中()的作用是分组,用来获取想要得到的内容,其中也使用非贪婪的方式进行匹配
import requests #HTTP库
import re #正则表达式
import time #时间模块
def getPage(url):
userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
headers = {
"User-Agent": userAgent
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
return None
def parsePage(html):
# 1排名 2图片 3电影名 4主演 5上映时间
regex = '.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?).*?star.*?>(.*?).*?releasetime.*?>(.*?).*?integer.*?>(.*?).*?fraction.*?>(.*?).*? '
pattern = re.compile(regex, re.S)
items = re.findall(pattern, html)
for item in items:
yield {
"排名": item[0],
"图片": item[1],
"电影名": item[2],
"演员": item[3].strip()[3:],
"上映时间": item[4].strip()[4:],
"评分": item[5] + item[6]
}
def main(offset):
url = "http://maoyan.com/board/4?offset=" + str(offset)
html = getPage(url)
for item in parsePage(html):
print(item)
for i in range(10):
main(i*10)
# 间歇3秒
time.sleep(3)
学习自 https://germey.gitbooks.io/python3webspider/content/3.4-Requests与正则表达式爬取猫眼电影排行.html