首页 > 编程语言 >python网络爬虫

python网络爬虫

时间:2023-04-10 10:02:18浏览次数:38  
标签:xpath 网页 python text 爬虫 网络 html requests browser

一、爬虫的基本思路

  • 打开网页:requests / urllib
  • 找到需要的信息:标签 / xpath / jsonpath / ...
  • 获取和存储信息:json文档

二、网页的分类

1. 静态网页

源代码中包含需要的信息

国务院办公厅关于印发"十四五"国民健康规划的通知

爬取方式:直接从源代码中提取需要的信息

2. 动态网页

源代码无法直接获取需要的信息

中国日报-搜索

爬取方式:通过抓包的方式获取信息来源的真实链接


三、静态网页爬取

1、 导入需要的库

requests库用于访问网页,获取网页的html;etree库用于解析html文件,便于提取信息。

import requests #访问网页
from lxml import etree #格式化html

注:requests库和lxml库需要提前在命令行中安装。

pip install requests
pip install lxml

2、访问网页并获取源代码

url = "http://www.gov.cn/zhengce/content/2022-05/20/content_5691424.htm"

html = requests.get(url)
html.encoding=('utf-8')
html.text

3、 格式化html并提取需要的信息

1. etree格式化html

e = etree.HTML(html.text)

2. 获取目标信息的xpath

快捷键: ctrl+shift+c

标题的xpath:

/html/body/div[6]/div[3]/table[1]/tbody/tr/td/table[1]/tbody/tr[3]/td[2]

正文的xpath:

//*[@id="UCAP-CONTENT"]/p/span

3. 通过xpath提取信息

title = e.xpath("/html/body/div[6]/div[3]/table[1]/tbody/tr/td/table[1]/tbody/tr[3]/td[2]")
print(title[0].text)

content = e.xpath("//*[@id=\"UCAP-CONTENT\"]/p/span") # 注意引号前添加反斜杠
text = ''
for i in range(len(content)):
  text += content[i].text + '\n'
print(text)

四、 动态网页爬取

1、 抓包

中国日报-搜索为例

检查 \(\rightarrow\) 网络 \(\rightarrow\) Fetch/XHR \(\rightarrow\) 刷新

可以找到真实请求网址为:https://newssearch.chinadaily.com.cn/rest/en/search?keywords=carbon&sort=dp&page=0&curType=story&type=&channel=&source=

由于真实请求网址是一个静态网页,因此可以按照静态网页爬虫的方式爬取。

注:如果在Fetch/XHR中有多个请求网址,可以在右侧预览中找到请求的源代码,通过源代码中是否包含需要的信息判断该请求是否为真实请求。

2、 请求头参数

如果在抓包的过程中,真实网页无法直接访问或者出现异常,可以尝试在requests.get( )函数中添加请求头参数。(目前没遇到过相关的问题,仅作参考)

请求头参数的获取

检查 \(\rightarrow\) 网络 \(\rightarrow\) Fetch/XHR \(\rightarrow\) 标头 \(\rightarrow\) 请求标头

headers = {
    "Cookie":
    "wdcid=1183a2b961549484; ariaDefaultTheme=undefined; UM_distinctid=186a62056b0730-0985dbc61ace4a-26021151-e1000-186a62056b1859",
    "Host": "newssearch.chinadaily.com.cn",
    "Referer": "https://newssearch.chinadaily.com.cn/",
    "User-Agent":
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest"
}

html = requests.get(headers = headers,url = url)

五、 Selenium爬虫

优点:

  • 技术上较直接
  • 能够绕过反爬虫机制

缺点:

  • 爬虫效率低,耗时长

  • 网络环境要求高

from selenium import webdriver

# options = webdriver.ChromeOptions()
# options.add_argument('--headless')
# options.add_argument('--disable-gpu')
browser = webdriver.Chrome()
browser.maximize_window()
# 打开网页
url = 'https://r.cnki.net/kns/brief/result.aspx?dbprefix=gwkt'
browser.get(url)
# 选择专业搜索
adv_button = browser.find_element(by="xpath", value="//*[@id=\"1_2\"]/a")
adv_button.click()
# 输入关键词
keywords = "(QW = '碳' or QW = '大气污染' or QW = '化石燃料' or QW = '温室气体') and YE = '2001'"
text_box = browser.find_element(by="xpath", value="//*[@id=\"expertvalue\"]")
text_box.send_keys(keywords)
# 点击左侧加号
plus_key = browser.find_element(by="xpath", value="//*[@id=\"3first\"]")
plus_key.click()
# 选择省份
province_key = browser.find_element(by="xpath", value=f"//*[@id=\"3child\"]/dd[1]/a")
province = province_key.text
province_key.click()
# 爬取需要的信息
title = browser.find_elements(by="class name", value="s-title")
source = browser.find_elements(by="class name", value="s-gre")

print(title[0].text)

六、 网页检索和信息存储

(见示例)

标签:xpath,网页,python,text,爬虫,网络,html,requests,browser
From: https://www.cnblogs.com/Easterlin/p/17301869.html

相关文章

  • Python Tkinter config
    PythonTkinterconfigconfig可以设置tkinter组件的样式参数。比如:组件变量.config(background='black')在文本框(Text)和画布(Canvas)中还提供了tag_config和itemconfig函数,用于重新设定元素样式参数。这个参数在动态更新tkinter组件样式,以及在文本框和画布中动态改变元素样式有很......
  • python播放视频
    python播放视频pipinstallpygameimportpygamepygame.init()#Setthedimensionsofthewindowscreen=pygame.display.set_mode((640,480))#Loadthevideofilevideo=pygame.movie.Movie("1.mp4")#Playthevideovideo.play()#Wait......
  • ubuntu安装python环境scikit-learn低版本
    Ubuntu默认使用的是python3.8,要安装插件需要先安装几个依赖包      安装uwsgi需要安装gccpython3.8-dev python-dev      安装scikit-learn旧版本需要安装python3-sklearnpython3-sklearn-lib这两个包,python3.8支持最早的版本是scikit-learn==0.24.2    ......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-文章大纲智能生成器从0到1快速入门——官网推
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • python 基础练习
    f=3d=6#print(f>5ord>5)#print(not(d>5))#(f>5)andprint(111)#输出#print('我是好人%s'%('哈哈'))#name=input('请输入名字')#print('tamadhuaile%s'%(name))#if6>7:#print(222)#e......
  • 20230409-Python-字符串-day6
    字符串4月9字符串是python中最常见的数据类型,我们可以使用单引号''、双引号""、三引号""""""来创建字符串,只要为变量分配一个值即可#单引号var1='helloword'#双引号var2="helloPython"#三引号,可以换行,如果没有变量名,这就是一个多行注释var......
  • #yyds干货盘点#Python读写文件脚本
    该脚本根据输入的路径,可以读取路径下的所有文件,实现匹配字符串替换,添加内容和删除内容的功能。importosfromfileinputimportFileInput#删除内容defmatch_then_delete(inputpath):forroot,dirs,filesinos.walk(inputpath):forfileinfiles:......
  • Python ORM Pony PostgreSQL数据库 常用操作
    Pony是一个高级的对象关系映射器ORM框架。Pony它能够使用Python生成器表达式和lambdas向数据库编写查询。Pony分析表达式的抽象语法树,并将其转换为SQL查询。支持SQLite,MySQL,PostgreSQL和Oracle等数据库,本文主要介绍PythonORMPony中PostgreSQL数据库常用操作,及数据增加、删除......
  • 4.9软工日报(神经网络
    跟着书学了神经网络的一些最最最基本的内容,首先安装了numpy库,还有matplotlib库,第二个库是用来绘图用的。其次还安装了  这两个软件包用于将numpy数组的图片转化成其他维度和形状,当然还有很多其他功能,安装完这些库就够用了。首先神经网络大致可分为三层,输入层,中间层和输出层,......
  • Python同Java及C++的不同之处
    Python同Java及C++的不同之处1.C++、Java对变量的定义很严格比如inta=0python则直接定义a=02.C++、Java代码结束时需要用;隔开比如inta=0;,而python则不用a=0直接换行即可3.C++、Java中的循环或者判断需要用{}括起来for(i=0;i<5;i++){},python使用:forii......