关键词检索网址

import requests
from bs4 import BeautifulSoup
import re
import time
from random import choice

# 创建headers字段
def createUA():
    # 运行该程序前:请打开浏览器前往"https://www.baidu.com"手动登录自己的百度账户,按F12打开开发者模式,选择最上面一排Network/网络选项卡
    # 接着按F5刷新本网页,捕获到的请求里一直往上翻到最顶端,选择第一次请求(即名称为www.baidu.com的请求)。
    # 再选择右侧标头选项卡,往下滑到请求标头处,将Cookie字段的值全部复制下来(有很长一段的)替换掉下行的****** 替换后可直接运行该文件
    ua = {'Cookie': 'BIDUPSID=AA1A39F756D4D0E2B83B6E1A38639146; PSTM=1716785788; BAIDUID=AA1A39F756D4D0E214B3565351B70FC4:FG=1; BAIDUID_BFESS=AA1A39F756D4D0E214B3565351B70FC4:FG=1; BD_UPN=12314753; BA_HECTOR=a1ala1ah8g2ga4a50h0g2g2l7qi0q11j584ju1v; ZFY=g:AC:BGYpTRw7Bm3hsLiEJdWgigibvSPJNMZd82LKKy2k:C; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598',
          'Host': 'www.baidu.com', \
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'}
    return ua
    # 程序运行无数据返回爬不了的时候,浏览器直接刷新继续按上述方法换字典里的Cookie值就完事了

# 将百度搜索链接给予的加密URL转化为真实的URL
def convertRealUrl(url, s2):
    try:
        headers = createUA()
        realR = s2.get(url = url, headers = headers, allow_redirects = False)
        # 当请求加密链接,初两次响应的Http报文往往告知浏览器需要重定向,最初两次的响应报文里才有Location属性来告知浏览器需要重定向到的真实网站链接。
        # 此时我们不允许会话自动根据给出的Location重定向跳转,因为允许重定向后会自动跳到最新的真实的URL站点,这时就只返回最新站点的响应HTTP报文(已完成重定向后),此时响应标头里不再有指示重定向url的Location字段。此方法就会失效!
        return realR.headers['Location']
    except:
        # print(realR.status_code, end = "")
        print("头部字段没有Location属性或者加密的url有异常")
        return url# 如果找不到Location头部字段无法返回真实链接,那么就返回原来的加密链接

# 获取搜索页
def getSearchPage(keyword, pn, s1):
    headers = createUA()
    url = 'http://www.baidu.com/s'
    payload = {'wd': keyword, 'pn': pn}
    try:
        r = s1.get(url, headers = headers, params = payload, timeout = 30)
        print('状态码是:', r.status_code)
        r.raise_for_status()
        r.encoding = 'utf-8'
        return r.text
    except:
        return "状态码异常"

# 升级!爬取一页的标题和真实链接
def upgradeCrawler(html, s2):
    soup = BeautifulSoup(html, 'lxml')
    titles = []
    links = []
    for h3 in soup.find_all('h3', {'class': re.compile('c-title t')}):
        # a.text为获取该路径下所有子孙字符串吧。可能刚好a元素和em元素间没有换行符,所以抓取的字符串里没有\n换行符
        g_title = h3.a.text.replace('\n', '').replace(',', ' ').strip()# 去掉换行和空格,部分标题中还有逗号会影响CSV格式存储,也要去除。
        g_url = h3.a.attrs['href']
        g_url = convertRealUrl(g_url, s2)
        print("{}\t{}\t".format(g_title, g_url))
        titles.append(g_title)
        links.append(g_url)
    return titles, links

# 将二维列表数据写入CSV文件
def writeCSV(titles, links):
    infos = list(zip(titles, links))
    # fo = open('./BDlinks.csv', 'at', encoding='utf-8')# 需要锁定用utf-8编码打开,不然该文件很可能会以gbk中文编码存储,这导致部分url中的西文字符存储到本文件时无法通过gbk模式编码存储。
    for row in infos:
        # fo.write(",".join(row) + "\n")
        print(row+'\n')
    # fo.close()
    # print("CSV文件已保存!")

# 顶层设计
def main():
    while True:  # 循环
        keyword = input("请输入搜索关键词:")
        num = int(input("请输入爬取页数:"))
        titles = []
        links = []
        # s1会话用于获取搜索结果页
        s1 = requests.session()
        # s2会话用于转真实URL
        s2 = requests.session()
        # 第1页为0,第2页为10,第3页为20,依次类推
        num = num * 10
        for pn in range(0, num, 10):
            html = getSearchPage(keyword, pn, s1)
            print('标题\tURL\t')
            ti, li = upgradeCrawler(html, s2)
            titles += ti
            links += li
            print("{0:->41}{1:-<36.0f}".format("当前页码为:", pn / 10 + 1))
            time.sleep(30)
        print('爬取完成!')
        writeCSV(titles, links)

# 代码不要强求都封装成函数,这样会让传参(变量作用域)变得十分复杂和麻烦!也会增加代码行数!而且有些部分从整体意义上就是不好分的!

if __name__ == '__main__':
    main()

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

攻心的销售文案短句 让客户一辈子只认你	https://mp.weixin.qq.com/s?__biz=MzUzNzM4NjkxNw==&mid=2247490795&idx=1&sn=dc224466e1c92420c2c363dcaf4d95d8&chksm=fae69621cd911f37715391c07584b3771c6f4d64346fa19be65d4587c50e070d88ef0f7f65d8&scene=27	
营销文案短句 - 百度文库	https://wenku.baidu.com/view/d2f1ded66b0203d8ce2f0066f5335a8102d26624.html	
🎀适合各行各业销售发的朋友圈文案|文案	https://mbd.baidu.com/newspage/data/dtlandingsuper?nid=dt_4444046255974402353	
经典广告营销文案 离不开的7大类型⭐️	https://www.xiaohongshu.com/explore/63e8be4c0000000013013e3c	
「营销文案」100句走心文案……句句扎心!	http://baijiahao.baidu.com/s?id=1648145262697117969&wfr=spider&for=pc	
直击灵魂的营销文案 句句不离人性❕🍷	https://mbd.baidu.com/newspage/data/dtlandingsuper?nid=dt_4784180538761099663	
营销文案策划范文(精选5篇) - 百度文库	https://wenku.baidu.com/view/328a93051dd9ad51f01dc281e53a580217fc504e.html	
营销的文案310句	http://m.oh100.com/meiwen/6237576.html	
-----------------------------------当前页码为:1-----------------------------------
状态码是: 200
标题	URL	
最实用的朋友圈销售文案 拿走不谢! - 知乎	https://zhuanlan.zhihu.com/p/611607921	
38份营销创意方案经典推荐~ - 知乎	https://zhuanlan.zhihu.com/p/666549387	
六一借势营销不知道怎么写?10大行业营销文案模板|速来抄作...	https://zhuanlan.zhihu.com/p/631891974	
营销型文案怎么写 营销推广文案写作技巧? - 知乎	https://www.zhihu.com/question/319637136/answer/2281495982?utm_id=0	
100句2021年值得收藏的广告文案! - 知乎	https://zhuanlan.zhihu.com/p/449378333	
最全618促销海报文案合集 100+有灵魂的文案 - 知乎	https://zhuanlan.zhihu.com/p/632285678	
100句的经典商业文案(值得收藏) - 知乎	https://zhuanlan.zhihu.com/p/613364181	
盘点丨2017年10大最佳营销文案 月薪3万文案的秘诀是... - ...	https://zhuanlan.zhihu.com/p/32453405	
掌握618年中大促必备的营销文案技巧!本文分享14个行业的13...	https://zhuanlan.zhihu.com/p/631196598	
销售高情商朋友圈 20句经典文案! - 知乎	https://zhuanlan.zhihu.com/p/647319831	
-----------------------------------当前页码为:2-----------------------------------
状态码是: 200
标题	URL	
100句的经典商业文案(值得收藏) - 知乎	https://zhuanlan.zhihu.com/p/613364181	
38份营销创意方案经典推荐~ - 知乎	https://zhuanlan.zhihu.com/p/666549387	
六一借势营销不知道怎么写?10大行业营销文案模板|速来抄作...	https://zhuanlan.zhihu.com/p/631891974	
100条最新男装文案②(值得收藏) - 知乎	https://zhuanlan.zhihu.com/p/638160311	
100条男装最新文案 - 知乎	https://zhuanlan.zhihu.com/p/628292200	
营销型文案怎么写 营销推广文案写作技巧? - 知乎	https://www.zhihu.com/question/319637136/answer/2281495982?utm_id=0	
【朋友圈】各类销售营业通用文案 - 知乎	https://zhuanlan.zhihu.com/p/633263149	
-----------------------------------当前页码为:3-----------------------------------
状态码是: 200
标题	URL	
100句的经典商业文案(值得收藏) - 知乎	https://zhuanlan.zhihu.com/p/613364181	
38份营销创意方案经典推荐~ - 知乎	https://zhuanlan.zhihu.com/p/666549387	
六一借势营销不知道怎么写?10大行业营销文案模板|速来抄作...	https://zhuanlan.zhihu.com/p/631891974	
100条最新男装文案②(值得收藏) - 知乎	https://zhuanlan.zhihu.com/p/638160311	
100条男装最新文案 - 知乎	https://zhuanlan.zhihu.com/p/628292200	
营销型文案怎么写 营销推广文案写作技巧? - 知乎	https://www.zhihu.com/question/319637136/answer/2281495982?utm_id=0	
【朋友圈】各类销售营业通用文案 - 知乎	https://zhuanlan.zhihu.com/p/633263149	
-----------------------------------当前页码为:4-----------------------------------
状态码是: 200
标题	URL	
100句的经典商业文案(值得收藏) - 知乎	https://zhuanlan.zhihu.com/p/613364181	
38份营销创意方案经典推荐~ - 知乎	https://zhuanlan.zhihu.com/p/666549387	
六一借势营销不知道怎么写?10大行业营销文案模板|速来抄作...	https://zhuanlan.zhihu.com/p/631891974	
100条最新男装文案②(值得收藏) - 知乎	https://zhuanlan.zhihu.com/p/638160311	
100条男装最新文案 - 知乎	https://zhuanlan.zhihu.com/p/628292200	
营销型文案怎么写 营销推广文案写作技巧? - 知乎	https://www.zhihu.com/question/319637136/answer/2281495982?utm_id=0	
【朋友圈】各类销售营业通用文案 - 知乎	https://zhuanlan.zhihu.com/p/633263149	
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值