B站python视频教程(网页爬虫篇)

发送请求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号

你可能感兴趣的:(Python爬虫)