爬虫练习题(一)



 Don't just follow the path .Make your own trail .
不要只是沿着路走,走你自己的路。

        这次发稿具有极强的纪念意义,生日当天发稿,开启了我网络笔记的生涯,以及加深了对爬虫的无限热爱,希望大家能够给予我支持!!!第一次发稿还请多多支持!!!以后精彩不断哦。

10.(选做题1)目标网站https://www.sogou.com/
要求:
1.用户输入要搜索的内容,起始页和终止页
2.根据用户输入的内容爬取相关页面的源码

3.把获取下来的数据保存到本地
import requests
word = input("请输入搜索内容")
start = int(input("请输入起始页"))
end = int(input("请输入结束页"))
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.44'
}
for n in range(start, end + 1):
    url = f'https://www.sogou.com/web?query={word}&page={n}'
    # print(url)
    response = requests.get(url, headers=headers)
    with open(f'{word}的第{n}页。html', "w", encoding="utf-8")as file:
        file.write(response.content.decode("utf-8"))





         3.把每个参数以"&"符分割开来

         结论:(1)参数query是搜索对象,中文字符会进行转义(转义后编码不用记忆)

                    (2)参数ie是转义的编码类型,以"utf-8"为例,该参数可以在Network- Payload-ie=utf-8,有些包也可以在Network-Response-charset='utf-8',如图:

  4.但是有这俩个参数还不能满足试题的翻页爬取需求,所以我们要手动翻页再进行检查 
https://www.sogou.com/web?query=python&page=2&ie=utf8
  
5.终于到了最关键的时刻了!我们找到了规律,以及重要参数的含义,就可以构建通用的 URL了,如图:
url = f'https://www.sogou.com/web?query={word}&page={n}'
   

# 用变量把可变参数赋值,这样就构建好了一个新的URL

二、找参数
https://www.sogou.com/web?query=Python&_asf=www.sogou.com&_ast=&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=12736&sst0=165****312860&lkt=0%2C0%2C0&sugsuv=165****656976942&sugtime=165****312860
https://www.sogou.com/web?query=java&_ast=1650428313&_asf=www.sogou.com&w=01029901&p=40040100&dp=1&cid=&s_from=result_up&sut=10734&sst0=165****363389&lkt=0%2C0%2C0&sugsuv=165****656976942&sugtime=165****363389
https://www.sogou.com/web?query=C%E8%AF%AD%E8%A8%80&_ast=1650428364&_asf=www.sogou.com&w=01029901&p=40040100&dp=1&cid=&s_from=result_up&sut=11662&sst0=165****406805&lkt=0%2C0%2C0&sugsuv=165****656976942&sugtime=165****406805
https://www.sogou.com/web?
https://www.sogou.com/web?query=Python&
https://www.sogou.com/web?query=Python&page=2&ie=utf8

 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.44'
'cookie' = "IPLOC=CN3600; SUID=191166B6364A910A00000000625F8708; SUV=165****656976942; browerV=3; osV=1; ABTEST=0|1650428297|v17; SNUID=636A1DCD7B7EA775332A80CB7B347D43; sst0=663; ld=llllllllll2AgcuYlllllpJK6jclllllHuYSpyllllDlllllVllll5@@@@@@@@@@; LSTMV=229,37; LCLKINT=1424"
'URl' = "https://www.sogou.com/web?query=Python&_ast=1650429998&_asf=www.sogou.com&w=01029901&cid=&s_from=result_up&sut=5547&sst0=165****005573&lkt=0,0,0&sugsuv=165****656976942&sugtime=165****005573"
url="https://www.sogou.com/web?query={}&page={}:


# UA要以字典形式被headers接收

      1.headers的错误:

" ":" ",      
# 构建字典的格式,','千万千万别忘了
# headers是关键字不能写错了,写错的话就会有如下报错


import requests
url = "https://www.bxwxorg.com/"
hearders = {
    'cookie':'Hm_lvt_46329db612a10d9ae3a668a40c152e0e=1650361322; mc_user={"id":"20812","name":"20220415","avatar":"0","pass":"2a5552bf13f8fa04f5ea26d15699233e","time":1650363349}; Hm_lpvt_46329db612a10d9ae3a668a40c152e0e=1650363378',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.44'
}
response = requests.get(url, hearders=hearders)
print(response.content.decode("UTF-8"))


Traceback (most recent call last):
  File "D:/pythonproject/第二次作业.py", line 141, in <module>
    response = requests.get(url, hearders=hearders)
  File "D:\python37\lib\site-packages\requests\api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "D:\python37\lib\site-packages\requests\api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
TypeError: request() got an unexpected keyword argument 'hearders'

# 原因:三个hearders写的一致,但是headers是关键字,所以报类型错误




# 但是写成heades会有另一种报错形式

import requests
word = input("请输入搜索内容")
start = int(input("请输入起始页"))
end = int(input("请输入结束页"))
heades = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.44'
}
for n in range(start, end + 1):
    url = f'https://www.sogou.com/web?query={word}&page={n}'
    # print(url)
    response = requests.get(url, headers=headers)
    with open(f'{word}的第{n}页。html', "w", encoding="utf-8")as file:
        file.write(response.content.decode("utf-8"))


Traceback (most recent call last):
  File "D:/pythonproject/第二次作业.py", line 117, in <module>
    response = requests.get(url, headers=headers)
NameError: name 'headers' is not defined

# 原因:三个hearders写的不一致,所以报名称错误




# 正确写法是,最好不要写错!

import requests
url = "https://www.bxwxorg.com/"
headers = {
    'cookie':'Hm_lvt_46329db612a10d9ae3a668a40c152e0e=1650361322; mc_user={"id":"20812","name":"20220415","avatar":"0","pass":"2a5552bf13f8fa04f5ea26d15699233e","time":1650363349}; Hm_lpvt_46329db612a10d9ae3a668a40c152e0e=1650363378',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.44'
}
response = requests.get(url, headers=headers)
print(response.content.decode("UTF-8"))




三、循环
for n in range(start, end + 1):

# 为什么是'end+1'呢:因为range函数的范围区间是左闭右开的所以真实的end值取不到,在后面加1就可以取到前一个真实值了

因为是翻页爬取,需要用到每一页的URL,所以要把构建的URL调入循环中


四、requests的基本介绍:(江湖人称  "urllib3"  )

        1.安装:Win + R --> cmd -->输入pip install requests

        # 下载后如果不能调用是因为:模块安装在Python自带的环境中,自己用的虚拟环境没有这    个库,要指定环境

        # 指定环境 : 终端输入where python找到安装路径  -->  File  -->  setting  -->  project  --> project interpreter  -->  找到设置图标齿轮  -->  Add  -->  system interpreter  -->  ...  -->  (where python中的路径)  -->  OK  -->  Apply应用  -->  OK

        2.爬虫的请求模块urllib.request模块  (urllib3)

        (1)常用方法:

                urllib.request.urlopen("网址")

                        作用:向网站发起一次请求,并获取相应

                字节流 = response.read().decode('utf-8')

                urllib.request request("网址", headers="字典")

                        # 因为urlopen() 不支持重构User-Agent

        (2)requests模块

                (2-1)request的常用用法:

                    requsts.get(网址)

                (2-2)响应的对象response的方法:

                   response.text返回Unicode格式的数据(str)

                   response.content返回字节流数据(二进制)

                   response.conten.decode('utf-8')手动进行解码

                    response.url返回url

                    response.encode() = "编码"

        (3).通过requsts模块发送POST请求:

                cookie:

                cookie是通过在客户端记录的信息确定用户身份

                HTTP是一种连接协议客户端和服务器交互仅仅限于“请求/响应”结束后断开,下一次请 求时,服务器会认为是一个新的客户端,为了维护他们之间的连接,让服务器知道这是前一个用户发起的请求,必须在一个地方保存客户端信息

                session;

                session是通过在服务端记录的信息确定用户身份,这里的session就指的是一次会话







 这样就可以获取页面源码了!!!
#python爬虫#
全部评论
楼主厉害,学到了
1 回复 分享
发布于 2022-08-17 19:37 陕西

相关推荐

04-12 21:52
南开大学 Java
鼠鼠有点摆,去年边学着没敢投简历,没实习。从1月到现在总共面了五次,四次字节的日常(HR打电话约面试才敢去的),然后一次腾讯的暑期,都是一面挂,其他则是没给面。暑期的岗,4.2才开始海投,前面想着等字节第四次一面后再投,结果挂,而且感觉投晚了。字节投了11个,9个简历挂,剩下2个没动静。阿里全都简历挂,剩下的在&quot;投递简历&quot;。腾讯给了一次面。然后其他大中厂、手机厂什么的都是做完测评or笔试就没下文,打开几个看也是终止流程,感觉剩下的也应该是简历挂了。感觉是简历的原因?项目部分,几次面试,感觉面试官主要就拷问过秒杀这一个点。自己说的时候会尝试把sse那条说成亮点,但除了腾讯面试官问过一下这整个点在业务方面对用户有什么用之类的问题外,其他最多只是问一下sse八股...感觉也许不是很让面试官感兴趣。这个短链接也是无人问津,就被问过一回雪花算法的设计。也许我该拿点评改改,然后再在网上找一个什么项目,凑两个,而不是用自己现在这两个项目?或者是点评改改放前面,然后原本第一个项目,把秒杀抽掉,剩下的想办法从网上火的RAG项目里移植点亮点,或者直接就用网上的RAG项目?感觉我主要还是偏向后端开发,但是感觉如果除开点评,再拿一个项目,想不到有什么自己能掌控且跟点评不重的。然后鼠鼠之前主要的问题是担心面试让打开项目演示,然后就一直花时间在用AI整第一个项目,第二个项目都没时间整,第四次面试之前还因为太害怕被认为不熟悉项目,跟AI一起把简历的说辞做了大幅度弱化,然后暑期都是拿弱化后的简历投的,感觉是不是看上去太没有吸引力就直接给简历挂了。(图1是弱化后的,图2是弱化前的,但之前3月初投了几家好像也是简历挂。)而且因为3月花了很多时间整在跟AI整代码,导致八股和算法都没怎么看,算法之前有跟灵神题单刷一些,还算入门,但是八股只看了一些基本的,可能面试的时候只答得上来60-70%,而且表述有些混乱,都是想到哪说到哪;前面几回面试基本上都有大板块的基础八股没答出来,比如RedisZ&nbsp;Set数据结构,MQ延时消息、可靠性保证,JVM内存分配的过程、GC&nbsp;roots,JUC锁,设计模式。现在有点不知道该怎么办。求大佬们给点简历修改建议或者面试准备建议,不胜感激!
何时能不做牛马:简历每个点之间的间距可以缩一下。几乎没遇到过要演示项目的情况,即使万一遇上了你也可以说部署在其他电脑上本地没代码。nku不应该简历挂吧?抓紧背背八股练练表达,不要放弃,五六月份找到也不晚(不然还得提前入职
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务