四引:
一表:
三函:
此次,我们针对租房网站进行相关信息的爬取,并使用excel来进行保存
首先:要先区别网站是异步加载还是同步加载!这关乎到你取数据的位置。
其次:不是json格式是没法使用jsonpath模块的,所以我们使用beautifulsoup模块来进行抓包。
目标:
首先我们把任务用函数进行拆解,分为引入四个模块、三个基本函数和一个工作表的创建。四引三函一表一main
四引:
import requests
import re#不一定会用到,绝大多数情况用不到
from bs4 import BeautifulSoup
from openpyxl import workbook
一表:
这里采用的是excel的格式进行保存,需要提前下载第三方模块:openpyxl
#1.导包,这里要利用from导入
from openpyxl import workbook
#2.实例化一个excel对象
wb = workbook.Workbook()#第二个W是大写
#3.激活当前表,这里active后面不用加括号
wt = wb.active
#4. 设置表头,以列表形式传参,每一项为一行
wt.append([],[]...)
#5. 运行并保存,后面是后缀名
wt.save("命名.xlsx")
- 后续对表的操作是对wt的操作,因为wt才激活了表。而wb仅用于创建一个对象和保存表。wt是worktake的缩写,直译为工作操作,方便记忆。
- 对整个表的操作,如:创建excel对象、保存表是用wb
- 对表数据的操作是用wt
三函:
该函数专门负责发起请求
def get_data(url,headers_message):
#发起请求
response = requests.get(url,headers=headers_message)
html_data = response.text
return html_data#别忘了要返回出去
该函数专门用于处理数据,是最为重要的。利用正则表达式、BeautifulSoup、jsonpath来匹配
def parse_data(html_data):
#处理数据
soup = BeautifulSoup(html_data,"lxml")
.....#处理方式
save_data()
注意: 这里的末尾要引用下一个函数,用于保存数据。
该函数主要负责保存函数
def save_data():
#保存数据
wt_list = []#你要保存的各个数据写这里
wt.append(wt_list)
wb.save("命名.xlsx")
if __name__ == '__main__':
"""
目标:
标题: headline
钱: money
标题链接: head_link
详情信息: detail
带s结尾一般表示列表,不带s一般表示单项
"""
import requests,re
from bs4 import BeautifulSoup
from openpyxl import workbook
wb = workbook.Workbook()#实例化一个excel对象
wt = wb.active#激活表
wt.append(["标题","钱","标题链接","详情信息"])
def get_data(url,headers_message):
#获取数据
response = requests.get(url,headers=headers_message)
html_data = response.text
return html_data
def parse_data(html_data):
#解析数据
soup = BeautifulSoup(html_data,"lxml")
headlines = soup.select(".content__list--item--title ")
moneys = soup.select(".content__list--item--main span.content__list--item-price")
head_links = soup.select(".content__list--item--aside")
details = soup.select(".content__list--item--main p.content__list--item--des")
for headline,money,head_link,detail in zip(headlines,moneys,head_links,details):
#标题
h = headline.get_text().strip()
#价格
m = money.get_text().strip()
#标题链接
he_li = head_link["href"].strip()
#详情信息
d = detail.get_text().strip()
#很多空格在斜杠里面,所以需要二次修改
de = re.sub("/|\s","",d)
save_data(h,m,he_li,de)
def save_data(h,m,he_li,de):
#保存数据
wt_list = [h,m,he_li,de]
wt.append(wt_list)
wb.save("链家租房情况.xlsx")
if __name__ == '__main__':
url = "https://cs.lianjia.com/zufang/"
headers_message = {
"User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 112.0.0.0Safari / 537.36Edg / 112.0.1722.64"
#referer是翻页来源,有的话最好写上
}
html_data = get_data(url,headers_message)#获取网页数据
parse_data(html_data)
一定要找出共同的规律,可能比较隐蔽但一定存在,分类讨论的方法不可取,因为数据匹配会错乱。
加上翻页:
"""
目标:
标题: headline
钱: money
标题链接: head_link
详情信息: detail
带s结尾一般表示列表,不带s一般表示单项
"""
import requests,re
from bs4 import BeautifulSoup
from openpyxl import workbook
wb = workbook.Workbook()#实例化一个excel对象
wt = wb.active#激活表
wt.append(["标题","钱","标题链接","详情信息"])
def get_data(url,headers_message):
#获取数据
response = requests.get(url,headers=headers_message)
html_data = response.text
return html_data
def parse_data(html_data):
#解析数据
soup = BeautifulSoup(html_data,"lxml")
headlines = soup.select(".content__list--item--title ")
moneys = soup.select(".content__list--item--main span.content__list--item-price")
head_links = soup.select(".content__list--item--aside")
details = soup.select(".content__list--item--main p.content__list--item--des")
for headline,money,head_link,detail in zip(headlines,moneys,head_links,details):
#标题
h = headline.get_text().strip()
#价格
m = money.get_text().strip()
#标题链接
he_li = head_link["href"].strip()
#详情信息
d = detail.get_text().strip()
#很多空格在斜杠里面,所以需要二次修改
de = re.sub("/|\s","",d)
save_data(h,m,he_li,de)
def save_data(h,m,he_li,de):
#保存数据
wt_list = [h,m,he_li,de]
wt.append(wt_list)
wb.save("链家租房情况.xlsx")
if __name__ == '__main__':
tp = ThreadPool(10)
for i in range(1,100):
print(f"正在爬取第{i}页的内容")
url = f"https://cs.lianjia.com/zufang/pg{i}"
headers_message = {
"User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 112.0.0.0Safari / 537.36Edg / 112.0.1722.64"
#referer是翻页来源,有的话最好写上,在首页不显示,去后面几页找
}
html_data = get_data(url,headers_message)#获取网页数据
parse_data(html_data)
#翻页的参数规律要自己找