发送请求Requests
使用Requests发送网页请求:一开始要导入Requests模块,然后,尝试获取某个网页。
>>> import requests
>>> r = requests.get('https://maoyan.com/board/4')
现在我们有一个名为r的Response对象。我们可以从这个对象中获取所有我们想要的信息。Requests简便的API意味着所有HTTP请求类型都是显而易见的。例如,你可以这样发送一个HTTP POST请求:
最简单的反爬
- 请求头 User-Agent
- 用来确保你是用浏览器来访问的,不能用代码访问网站!
- 但是我们可以用代码来伪装浏览器!
# python 3.6.3
import requests
url = 'https://maoyan.com/board/4'
# 告诉服务器,我们是浏览器(伪装)
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134'}
# .调用
r = requests.get(url,headers=header)
#输出到屏幕 200 http 状态码OK
print(r)
#打印文本
print(r.text)
成功获取一个网页信息!
XPath 提取数据
# 解析文本
def parse(text):
# 初始化 标准化
html = etree.HTML(text)
# 提取我们想要的信息,需要些xpath语法
# names是列表 xpath返回的一定是列表
names = html.xpath('//div[@class="movie-item-info"]/p[@class="name"]/a/@title')
releasetimes = html.xpath('//p[@class="releasetime"]/text()')
# 字典
item = {} # dict
# 序列解包
for name,releasetime in zip(names,releasetimes):
item['name']=name
item['releasetime'] = releasetime
#生成器
yield item
爬取数据存储
# 保存数据
def save2File(data):
with open('movie.json','a',encoding='utf-8') as f:
# dumps是把字典、列表等转化成字符串的函数
data = jsontext.dumps(data, ensure_ascii=False) + ',\n'
f.write(data)
整体代码
# python 3.6.3
import jsontext
import requests
from lxml import etree
def getOnePage(n):
# 字符串的格式化
url = f'https://maoyan.com/board/4?offset={n*10}'
# url = 'https://maoyan.com/board/4?offset={}'.format(n*10)
# url = 'https://maoyan.com/board/4?offset=%d'%10*n
# 告诉服务器,我们是浏览器(伪装)
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134'}
# .调用
r = requests.get(url,headers=header)
return r.text
# 解析文本
def parse(text):
# 初始化 标准化
html = etree.HTML(text)
# 提取我们想要的信息,需要些xpath语法
# names是列表 xpath返回的一定是列表
names = html.xpath('//div[@class="movie-item-info"]/p[@class="name"]/a/@title')
releasetimes = html.xpath('//p[@class="releasetime"]/text()')
# 字典
item = {} # dict
# 序列解包
for name,releasetime in zip(names,releasetimes):
item['name']=name
item['releasetime'] = releasetime
#生成器
yield item
# 保存数据
def save2File(data):
with open('movie.json','a',encoding='utf-8') as f:
# dumps是把字典、列表等转化成字符串的函数
data = jsontext.dumps(data, ensure_ascii=False) + ',\n'
f.write(data)
# text = getOnePage(1)
# items = parse(text)
# for item in items:
# save2File(item)
def run():
for n in range(0,10):
text = getOnePage(n)
items = parse(text)
for item in items:
save2File(item)
if __name__ == '__main__':
run()
Python方向
Web开发、爬虫、web全栈、数据分析、人工智能
阿里云大数据助理工程师 :需要考,有证书,与阿里相关企业 面试有优势
阿里云 云栖大会 9.20号