python爬虫小实战一 之 header里的坑

前几天我工作上的导师要我帮他写一个小爬虫。需要爬下新浪网上的有关关键字的新闻,把包含关键字的新闻内容查爬出来。

接下来就开始边做边记录下心得吧!!!

 

爬虫需要请求url,则需要导入requests包,要查找html页面里的内容,则需导入BeautifulSoup包

方便导入,可以这样:file -> settings  -> 点右上方的 “+” 号,然后在新的页面的搜索栏搜索即可。

import requests
from bs4 import BeautifulSoup

1、首先建一个News的类,创建构造函数:

def __init__(self,searchName,searchArea='news'):
    self.head = {
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
        "Chrome/61.0.3163.79 Safari/537.36"
    }
    self.searchName = searchName
    self.searchArea = searchArea
    self.urlData = []    #爬取数据的存储

我的思路是这样的 先在新浪自带搜索栏,搜一个大范围的包含特定字符串的新闻出来,然后再从这里面筛选。

首先查出来的结果是分了很多页的:

那我们需要去找到url之间的规律,分析下url规律:

https://search.sina.com.cn/?q=%C8%CB%BF%DA&c=news&page=1&col=&range=&source=&from=&country=&size=&time=&a=&pf=0&ps=0&dpc=1

q=%C8%CB%BF%DA这个其实就是中文的你想要搜索的内容 ,这里换了编码

c=news :代表的是新闻板块

page=1 :代表的是哪一页

经过测试发现,后面的那些参数可有可无,主要就是这3个参数。

然后按F12,看html里每条新闻对应的url怎么可以获取到:

可以看到,我们找到了每条新闻对应的url和标题!

 

然后开始写方法,获取分页数据,先测试下可不可以获取第二页数据:

def get_data(self):
    url = 'https://search.sina.com.cn/?q={}&c={}&ie=utf-8&sort=time&page={}'
    responses = requests.get(url.format(self.searchName,self.searchArea,2),headers=self.head)
    html = responses.text
    soup = BeautifulSoup(html, 'lxml')
    reg = soup.select('h2 a')   #查找html 里面的<h2> 标签下的<a>标签里的内容
    print(reg)

然后造对象,执行方法,一执行发现无论怎么都获取的是第一页的数据!!!第一页只有四条数据!哎呀糟心啊

 

然后网上开始找资料ing........

然后发现header里的bug, 之前的是我从浏览器header里直接复制过去的...然后发现格式不对,于是乎改成:

self.head = {

"Mozilla/5.0 " : "(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/61.0.3163.79 Safari/537.36" }

然后我天真的以为是这个问题,就又去执行,结果还是不行....

后面我又继续找,我看控制台里请求的header 里的内容,想着 我先试试照着控制台里的这些格式传下:

然后就改成了如下:

self.head = {
    'User-Agent' :"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
    "Chrome/61.0.3163.79 Safari/537.36"
}

结果还是只有第一页....

我找资料里全是header传的只有这个浏览器的header,没有其他...(是这里误导了我)

后面发现其实cookie也很重要,header里也需要加上:

self.head = {
    'User-Agent' :"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
    "Chrome/61.0.3163.79 Safari/537.36",
    'Cookie' : "U_TRS1=0000007f.3534544b.5ce35c4f.3c257585; U_TRS2=0000007f.353c544b.5ce35c4f.18b278dd"
}

最后可以根据url获取任意页的内容!!!

所以! 最靠谱的还是看浏览器的header里怎么传的,一般常用的有下面这些:

1.Host

2.Connection

3.Accept

4.User-Agent

5.Referrer

6.Accept-Encoding

7.Accept-Language

8.Cookie

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值