python爬虫目标网站的基本步骤

简介: 在访问目标网站的过程中分别需要做些什么步骤

3月1日起,2022年度个税汇算正式开始。一些人又可以领到国家的退税“红包”了。

很多网友在3月1日凌晨申请退税,纷纷晒出自己的退税金额,有的人退税金额超过万元,直呼:真香!

税务部门自从推出预约办理服务后,大家都纷纷在个税app上提前开始预约了截至2月28日,个税APP显示,3月1日当天预约已满。3月2日-3月20日仍然可以预约。

QQ图片20230301152100 (1).png

刚好最近要分享些爬虫类的文章,那本次实验以爬取“https://data.stats.gov.cn中的“城乡居民收支基本情况”为例,因为居民的收入支出也是跟税收有关联的。

数据爬虫基本流程如下:

发起请求:通过向目标站点发起请求,即发送一个request,请求可以包含额外的headers等信息,等待服务器响应

url='http://data.stats.gov.cn/easyquery.htm?cn=A01'
headers={'User-Agent':'Mozilla/5.0(Windows;U;Windows NT6.1;en-US;rv:1.9.1.6) Geko/20091201 Firefox/3.5.6'}#浏览器代理
key={}#参数键值对
key['m']='QueryData'
key['dbcode']='hgyd'
key['rowcode']='zb'
key['colcode']='sj'
key['wds']='[]'
key['dfwds']='[{"wdcode":"sj","valuecode":"LAST13"}]'
key['k1']=str(getTime())
r=requests.get(url,headers=headers,params=key)
js=json.loads(r.text)
js

获取相应内容:如果服务器能正常响应,会得到一个response,response的内容便是所要获取的页面内容,类型可能有HTML,json字符串,二进制数据等类型。根据实际分析发现,目标网站的反爬机制很严格,特别是针对IP的限制,同一个IP多次访问就被关小黑屋。所以这里我们直接采用python3使Selenium+Chrome+BeautifulSoup+隧道加强版IP池来进行爬取

#! -- encoding:utf-8 -- import requests # 导入requests库 import random import threading # 导入threading库,用于多线程
#要访问的目标页面
targetUrlList = [ “https://httpbin.org/ip”, “https://httpbin.org/headers”, “https://httpbin.org/user-agent”, ]
#代理服务器(产品官网 www.16yun.cn)
proxyHost = “t.16yun.cn” proxyPort = “31111”
#代理验证信息
proxyUser = “16yun” proxyPass = “16ip”
proxyMeta = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}" # 使用f-string格式化字符串
#设置 http和https访问都是用HTTP代理
proxies = { “http”: proxyMeta, “https”: proxyMeta, }
#设置IP切换头
tunnel = random.randint(1, 10000) headers = {“Proxy-Tunnel”: str(tunnel)}
#定义一个变量,用于统计请求次数
request_count = 0
#定义一个锁对象,用于保护请求次数的变量
lock = threading.Lock()
#定义一个函数,用于发起请求和打印响应
def get_url(url): global request_count # 声明全局变量 r = requests.get(url, proxies=proxies, headers=headers) # 使用requests库发起请求,传入代理和头信息 # 判断状态码是否为200,如果不是,打印错误信息 if r.status_code == 200: print(r.text) # 打印响应内容 else: print(f"请求失败,状态码为{r.status_code}") # 打印错误信息 # 获取锁,如果锁被占用,就等待,直到锁释放 lock.acquire() request_count += 1 # 请求次数加一 # 释放锁,让其他线程可以获取锁 lock.release()
#定义一个列表,用于存放线程对象
threads = []
#访问三次网站,使用相同的tunnel标志,均能够保持相同的外网IP
for i in range(3): for url in targetUrlList: t = threading.Thread(target=get_url, args=(url,)) # 创建线程对象,传入url参数 threads.append(t) # 将线程对象添加到列表中
#启动所有线程
for t in threads: t.start()
#等待所有线程结束
for t in threads: t.join()
#打印请求次数
print(f"总共请求了{request_count}次")

解析内容:得到的内容可能是HTML,可以用正则表达式,网页解析库进行解析,可能是json,可以直接转为json对象,可能是二进制数据,可以做保存或者进一步的处理

保存数据:可以存为文本,也可以保存至数据库,或者特定格式的文件

相关文章
|
12天前
|
数据采集 存储 XML
Python爬虫定义入门知识
Python爬虫是用于自动化抓取互联网数据的程序。其基本概念包括爬虫、请求、响应和解析。常用库有Requests、BeautifulSoup、Scrapy和Selenium。工作流程包括发送请求、接收响应、解析数据和存储数据。注意事项包括遵守Robots协议、避免过度请求、处理异常和确保数据合法性。Python爬虫强大而灵活,但使用时需遵守法律法规。
|
13天前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
14天前
|
数据采集 Web App开发 监控
高效爬取B站评论:Python爬虫的最佳实践
高效爬取B站评论:Python爬虫的最佳实践
|
15天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
19天前
|
数据采集 Web App开发 JavaScript
爬虫策略规避:Python爬虫的浏览器自动化
爬虫策略规避:Python爬虫的浏览器自动化
|
19天前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
113 1
|
6天前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
32 0
|
3天前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!
|
9天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
9天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!