一、目标和背景:
1688上面目标竞争对手或客户信息的爬虫下载,试了很久还没有搞定,所以考虑曲线救国,将需要的网页下载保存为html文件,再用Requests解析。
但是Requests-HTML一开始就是针对Requests从网络请求页面计的,并不能解析本地html文件。想用Requests-HTML解析本地html文件,可以借助Requests-File库实现,再提取出供应商,价格,产品型号的信息。
二、实现解析本地html文件
2.1 安装Requests-File
import requests
from requests_file import FileAdapter
2.2 实现代码
import requests
from requests_file import FileAdapter
import re
import pandas as pd
result_company = []
result_http = []
result_price = []
result_title = []
for i in range(1,36): #下载了36页html文件
url = "file:///C:/Users/peter/Downloads/{}.html".format(i)#逐一打开文件
s = requests.Session()
s.mount('file://', FileAdapter()) #调用函数
resp = s.get(url).text
company ='<div class="company-name" .*?>(.*?)</div>' #建立正则
http_add = '<a href="(.*?)" .*?'
resp_price = '<div class="showPricec">.*?>(.*?)</div><div class="pricestyle"></div></div>'
resp_products = '<div class="mojar-element-title">.*?>(.*?)</div>'
result = re.findall(company, resp,re.S)
price = re.findall(resp_price,resp,re.S)
products = re.findall(resp_products,resp,re.S)
for i in result:
result_company.append(re.sub('<.*?>','',i))
result_http.append(re.findall(http_add,i)[0])
for i in price:
result_price.append(re.sub('¥</div><div class="price">','',i))
for i in products:
result_title.append(re.sub('<.*?>','',i))
df = pd.concat([pd.DataFrame(result_company,columns=['公司']),pd.DataFrame(result_title,columns=['产品']),pd.DataFrame(result_price,columns=['价格']),pd.DataFrame(result_http,columns=['网址'])],axis=1)
df.to_excel(excel_writer = r"D:\1688.xlsx")
参考requests-file定义:https://github.com/dashea/requests-file