Python爬虫(学习笔记)

 

 

 

 

 

 

 

通过etree-xpath获取二手房源标题

from lxml import etree

import requests

#指定URL

url=’https://nc.58.com/ershoufang/’

#UA伪装

headers={‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0′}

#获取整页文本

page_text=requests.get(url=url,headers=headers).text

#初始化etree对象

tree=etree.HTML(page_text)

#第一次解析,获取对象列表

div_list=tree.xpath(‘//section[@class=”list”]/div’)

#打开文件

fp=open(‘./58.txt’,’w’,encoding=’utf-8′)

#遍历对象列表

for div in div_list:

    #第二次解析,获取二手房源标题

    title=div.xpath(‘./a/div/div/div/h3/text()’)[0]

    #数据持久化,写入本地文件

    fp.write(title+’\n’)

    #print(title)

 

 

 

导入包

指定URL

ua伪装

获取页面文本

初始化etree对象

通过xpath表达式

解析获取指定内容

数据持久化存储

 

解析方式总结

名称

正则表达式

BeautifulSoup

xpath

安装

pip install bs4

pip install lxml

pip install xpath

pip install lxml

导入包

import re

import requests

from bs4 import BeautifulSoup

import requests

from lxml import etree

import requests

原理

获取整页文本

指定re表达式

通过re方法匹配

获取指定内容

持久化数据存储

实例化soup对象

将页面文本载入soup对象

soup解析获取指定内容

持久化存储数据

1实例化一个etree对象,将需要解析的对象加载到该对象中

2调用etree中的xpaht方法,结合xpath表达式,实现标签定位和内容捕获

初始化

re.findall(ex,text,re.S)

本地数据初始化

soup=BeautifulSoup(fp,’lxml’)

网页文本初始化

soup=BeautifulSoup(page_text,’lxml’)

将本地文档源码加载到etree对象中

etree.parse(filePath)

将互联网的源码数据加载到etree对象中

etree.HTML(page_text)

方法

requests.get(url,headers)

requests.post(url,param,headers)

response.text文本

response.json

response.content二进制

soup.a/div/p/title/text/string

text返回该标签下所有文本内容(各级子标签)

string只返回本标签下的文本内容

例子:soup.title.parent.name

例子:soup.div.div.div.a.text

soup.find(‘tagName’),soup.find_all()

soup.find(‘tagName’,class_=’属性名’)

soup.select(‘.bookcont > ul > span > a’)

selecet多级访问,返回所有匹配项

.bookcont表示属性名ul表示标签名

find_all()方法没有找到目标是返回空列表,find()方法找不到目标时,返回None

通过CSS的类名查找:soup.select(“.sister”)

通过tag标签逐层查找:(可跨级)

soup.select(“body a”)

找到某个tag标签下的直接子标签:

soup.select(“head > title”)(不可跨级)

soup.a[‘href’]

xpath(‘xpath表达式’)

./表示当前目录

/(最左侧)表示根目录

/(不在最左侧)表示一个层级,相当于bs4的>

//(最左侧)表示多个层级相当于bs4的空格

//(不在最左侧)表示从任意层级开始定位

属性定位://tag[@attrName=’attrVal’]

索引定位:索引下标从1开始而不是从0开始,tag[@attrName=’attrVal’]/p[3]

‘//div[@class=’tang’]//li[5]/a/text()’[0]

/text()本层级内容

//text()所有层级内容

/@attrName取属性值

其他

中文文档

https://docs.python.org/zh-cn/3/library/index.html

中文文档

https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#find

中文文档

https://www.w3cschool.cn/lxml/

通过bs4解析三国

from bs4 import BeautifulSoup

import lxml

import requests

url=’https://so.gushiwen.cn/guwen/book_46653FD803893E4F7F702BCF1F7CCE17.aspx’

headers={‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0′}

page_text=requests.get(url=url,headers=headers).text

soup=BeautifulSoup(page_text,’lxml’)

#print(soup.div.div.div.a.text)#古诗文网

#print(soup.div.div.string)#None

#print(soup.div.div.div.a[‘href’])

chapters=soup.select(‘.bookcont > ul > span > a’)

print(chapters)

with open(‘sanguo.txt’,’w’,encoding=’utf-8′) as fp:

    for a in chapters:

        title=a.string

        link=a[‘href’]

        page_content=requests.get(url=link,headers=headers).text

        soup2=BeautifulSoup(page_content,’lxml’)

        content=soup2.find(‘div’,class_=’contson’)

        content_text=content.text

        fp.write(title+’:\n’+content_text+’\n’)

        print(title ,’ 写入成功!!!’)

 

导入

指定URL

UA伪装

 

读取起始页

 

创建soup对象,解析标题和内容URL

读取章节内容

 

 

 

 

 

 

 

 

 

 

 

创建soup2,解析章节内容

数据持久化,写入本地TXT文件

正则解析–爬取网页中的美女图片

import os.path

import requests

import re #导入包

#UA伪装

headers={‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0′}

#存储图片的文件夹

folder=’./meinv/’

if not os.path.exists(folder):

    os.mkdir(folder)

#指定URL

url=’https://m.woyaogexing.com/tupian/z/meinv/’

#解析正则表达式

ex='” data-src=”(.*?)” />’

#src=”//img.woyaogexing.com/images/grey.gif” data-src=”//img2.woyaogexing.com/2022/07/03/ecb599c9ffa42f2f!400×400.jpg” />

#解析获取图片url列表

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

image_list=re.findall(ex,text,re.S)

 

print(image_list)

#遍历图片URL

for src in image_list:

    src=’https:’+src #生成完整路径

    img_data=requests.get(url=src,headers=headers).content #读取图片的二进制数据content

    name=src.split(‘/’)[-1] #从路径获取图片名称

    path=folder+name #写入文件路径

    with open(path,’wb’) as fp:#打开文件

        fp.write(img_data) #写入数据

        print(name,’保存成功’)#打印日志

n 导入包

n UA伪装

n 创建文件夹存储图片

 

n 指定URL

n 读取页面所有内容

 

 

n 根据页面格式,编制正则表达式

n 通过正则表达式,解析页面内容获取图片url

 

 

n 遍历所有图片url

n 读取图片二进制数据

 

n 图片数据持久化存储

 

 

聚焦爬虫,爬取页面中指定的页面内容,例如豆瓣中评分>9的电影;

数据解析:从整个页面中获取所需的部分信息;

数据解析分类:

  • 正则
  • bs4-beautiful Soup
  • xpath-通用性强

数据解析原理:

解析的局部的文本内容都会在标签之间或者标签对应的属性中进行存储;

1 进行指定标签的定位

2 标签或者标签对应的属性中存储的数据值进行提取(解析)

爬取肯德基餐厅数据

import json#导入包

import  requests

#指定URL

url=’http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword’

add=’南昌’#指定参数

params={

‘cname’: ”,

‘pid’: ”,

‘keyword’: add,

‘pageIndex’: 1,

‘pageSize’: 10,

}#UA伪装

headers={‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0′}

#发起请求

response=requests.post(url=url,headers=headers,params=params)

json_obj=response.json()#获取数据

print(json_obj)

with open(‘kfc_’+add+’.json’,’w’) as fp:

    json.dump(json_obj,fp=fp)

#数据持久化保存

print(‘成功保存’)

requests爬虫流程

 

1导入包

 

2 指定url(通过F12调试查看)

 

3指定参数(通过F12调试查看)

 

4指定UA(UA伪装)

 

5发起请求get/post

 

6获取数据

 

7数据持久化保存

 

原文地址:http://www.cnblogs.com/zhangdezhang/p/16799448.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性