python 爬虫 / urllib 爬取多页数据 p0

这个主要是思路方法,不知道为啥锁我,这个哪里涉及版权的问题!!

一.需求及步骤分析

需求:获取,,,,,数据(不写了 免得锁我)

步骤分三部分:1.请求定制  2. 获取响应  3.下载内容

二.分析网页url生成规律

第一页:无规律

第二页:p2

第三页:p3

三.写代码

3.1导入模块(开头)

import urllib.request

3.2 封装函数(放置在最后面)

if __name__ == '__main__':
    page_start=int(input("请输入起始页面"))
    page_end=int(input("请输入结束页面"))

    for page in range(page_start,page_end+1):
        create_request(page)         # 1.请求定制  传参回传之后 request=create_request(page)
        get_content()                # 2.获取响应内容        content=get_content(request) 
        down_load()                  # 3.下载内容        down_load(page,content) 

3.3 请求定制函数方法(更新请求头) 顺着模块往下写

(1)第3.2步的封装函数将page传入,得到def create_request(page):,然后函数可以调用到page参数

(2)return request 将request返回给def create_request(page):, 封装行数的对应部分接收传回来的结果,得到request=create_request(page

def create_request(page):
    #1.获取url
    if (page=="1"):
        url="https://www.dianping.com/shanghai/ch10/g114o3 "
    else:
        url="https://www.dianping.com/shanghai/ch10/g114o3p"+str(page)
    #2.请求对象的定制(反爬虫)
    headers={
        "User-Agent":"Mozilla/5.0 ×××"
    }
    request =urllib.request.Request(url=url,headers=headers)
    return request

输入print(resquest)检测一下,没有报错

 3.4 获取响应内容

(1)获得封装函数的传参content=get_content(request) ,得到def get_content(request):,然后urlopen(request)可以调用

(2)return content 返回给def get_content(request),封装函数接收返回的return ,content=get_content(request)

def get_content(request):
    response=urllib.request.urlopen(request)
    content=response.read().decode("utf-8")
    return content

报错处理!

print(content)验证一下,出现了错误提示urllib.error.HTTPError: HTTP Error 403: Forbidden

原因使网站做了反爬虫机制,上网查了一下,没有找到比较好的答案,因为我已经做了反爬步骤了,还是被挡住了。

尝试:

  1. 决定用下火狐浏览器(又去下了火狐,哎)_______火狐失败啦!
  2. 模拟浏览器访问——失败
  3. 添加更多请求头(重点) a.只家agent—报错 b.只家cookie——不行 c.cookie+referer——不行

正确:cookie+referer+user-gent 于是更新前面的请求头

补充:反爬请求头这里应该浏览器里的所有都放进去,但是一般起作用的就是下面这3个,一个一个排查即可

重新print(content) 没有报错

 3.5 下载

(1)封装函数down_load(page,content) 参数传给def down_load(page,content):,然后可以调用

def down_load(page,content):
    with open("命名_"+str(page)+" .json","w",encoding="utf-8") as fp:
        fp.write(content)

运行之后

到这里爬取网页就结束啦!!

4.爬虫重点小结:

  1. 理清页面url的规律
  2. 反爬
  3. 传参
  4. 报错就去网上检索,然后尝试解决!
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值