解决方案:PHP CURL采集百度搜寻结果图片不显示问题的解决方法
优采云 发布时间: 2022-11-17 04:57解决方案:PHP CURL采集百度搜寻结果图片不显示问题的解决方法
PHP CURL采集百度搜索结果图片不显示问题的解决方法php / 管理员发表于2年前 98
1.根据关键词采集百度搜索结果
根据关键字采集百度搜索结果,可以使用curl来实现,代码如下:
导出后发现有些图片无法显示
2、采集后图片不显示原因分析
直接百度搜索,页面可以显示图片。用firebug查看图片路径,发现采集的图片域名和百度搜索的图片域名不一样。
采集返回图片域名
正常搜索图片域名
查看采集和正常搜索html,发现有个域转换js不一样
采集
var list = { "graph.baidu.com": "http://graph.baidu.com", "t1.baidu.com":"http://t1.baidu.com", "t2.baidu.com":"http://t2.baidu.com", "t3.baidu.com":"http://t3.baidu.com", "t10.baidu.com":"http://t10.baidu.com", "t11.baidu.com":"http://t11.baidu.com", "t12.baidu.com":"http://t12.baidu.com", "i7.baidu.com":"http://i7.baidu.com", "i8.baidu.com":"http://i8.baidu.com", "i9.baidu.com":"http://i9.baidu.com",};
正常搜索
var list = { "graph.baidu.com": "https://sp0.baidu.com/-aYHfD0a2gU2pMbgoY3K", "t1.baidu.com":"https://ss0.baidu.com/6ON1bjeh1BF3odCf", "t2.baidu.com":"https://ss1.baidu.com/6OZ1bjeh1BF3odCf", "t3.baidu.com":"https://ss2.baidu.com/6OV1bjeh1BF3odCf", "t10.baidu.com":"https://ss0.baidu.com/6ONWsjip0QIZ8tyhnq", "t11.baidu.com":"https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq", "t12.baidu.com":"https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq", "i7.baidu.com":"https://ss0.baidu.com/73F1bjeh1BF3odCf", "i8.baidu.com":"https://ss0.baidu.com/73x1bjeh1BF3odCf", "i9.baidu.com":"https://ss0.baidu.com/73t1bjeh1BF3odCf",};
因此可以得出结论,百度根据源地址、IP、header等参数判断为采集,会返回不同的js。
3、采集后不显示图片的解决方法
根据定义的域名,将采集批量转换为html。
添加域名转换后,所有图片都可以正常显示。
以上就是小编介绍的PHP CURL采集百度搜索结果图片不显示问题的解决方法。我希望它能帮助你。有什么问题请给我留言,小编会及时回复我们的。在此也非常感谢您对本站的支持!
解决方案:多线程导出excel_seo必备网站分析工具,关键词百度搜索结果查询导出源码
SEO必须网站分析工具关键词百度搜索结果查询并导出源代码
两个简单的版本,关于百度搜索结果的采集抓取,可以获取竞争对手网站,分析研究,只需输入关键词和搜索页码,就可以完成竞争对手的获取和研究,给出两个版本,希望起到参考和帮助的作用!
版本一功能
#百度搜索结果抓取<br />#author/微信:huguo00289<br /># -*- coding: utf-8 -*-<br /><br />import requests,time,random<br />from fake_useragent import UserAgent<br />from lxml import etree<br />import threading<br />import xlsxwriter<br /><br /><br /><br />class Baidu_search():<br /> def __init__(self):<br /> self.url="https://www.baidu.com/s?wd="<br /> self.ua=UserAgent()<br /> self.search_datas=[]<br /><br /><br /><br /> #获取cookies<br /> def get_cookies(self):<br /> with open("cookie.txt", "r", encoding="utf-8") as f:<br /> cookies = f.readlines()<br /> cookie=random.choice(cookies)<br /> cookie=cookie.strip()<br /> return cookie<br /><br /><br /> #获取搜索结果<br /> def get_search_objects(self,search_url):<br /> headers={<br /> "User-Agent":self.ua.random,<br /> 'Cookie':self.get_cookies(),<br /> }<br /> html=requests.get(search_url,headers=headers,timeout=8).content.decode("utf-8")<br /> time.sleep(2)<br /> req=etree.HTML(html)<br /> h3s=req.xpath('//div[@]/h3[@]/a')<br /> hrefs=req.xpath('//div[@]/h3[@]/a/@href')<br /> for h3,href in zip(h3s,hrefs):<br /> h3=h3.xpath('.//text()')<br /> h3=''.join(h3)<br /> href=self.get_website_url(href)<br /> data=h3,href<br /> self.search_datas.append(data)<br /> print(data)<br /><br /><br /><br /><br /> # 获取真实地址<br /> def get_website_url(self,baidu_url):<br /> r = requests.head(baidu_url, stream=True)<br /> website_url = r.headers['Location']<br /> # print(website_url)<br /> return website_url<br /><br /><br /> #插入excel<br /> def write_to_xlsx(self, file_name):<br /> workbook = xlsxwriter.Workbook(f'{file_name}_{time.strftime("%Y-%m-%d ", time.localtime())}.xlsx') # 创建一个Excel文件<br /> worksheet = workbook.add_worksheet(file_name)<br /> title = ['标题', '网址'] # 表格title<br /> worksheet.write_row('A1', title)<br /> for index, data in enumerate(self.search_datas):<br /> # content = content.rstrip()<br /> # keyword, rank, include_num, chart_url, title, game_id, company_num, long_words_num = data<br /> num0 = str(index + 2)<br /> row = 'A' + num0<br /> # data = [name, size, game_id]<br /> worksheet.write_row(row, data)<br /> workbook.close()<br /><br /> print("搜索结果数据插入excel表格成功!")<br /><br /><br /><br /><br /><br /> def main(self,keyword,num):<br /> for i in range(0, num):<br /> print(f'正在查询第{i+1}页百度搜索结果数据..')<br /> ym = i * 10<br /> search_url = f"{self.url}{keyword}&ie=UTF-8&pn={ym}"<br /> self.get_search_objects(search_url)<br /><br /> self.write_to_xlsx(keyword)<br /><br /><br /> #多线程<br /> def Thread_main(self,keyword,num):<br /> threadings=[]<br /> for i in range(0, num):<br /> print(f'正在查询第{i+1}页百度搜索结果数据..')<br /> ym = i * 10<br /> search_url = f"{self.url}{keyword}&ie=UTF-8&pn={ym}"<br /> t=threading.Thread(target=self.get_search_objects,args=(search_url,))<br /> threadings.append(t)<br /> t.start()<br /><br /> for x in threadings:<br /> x.join()<br /><br /> print("多线程查询百度搜索结果完成")<br /><br /> print(self.search_datas)<br /><br /><br />if __name__=='__main__':<br /> keyword="工业设计"<br /> num=10<br /> spider=Baidu_search()<br /> spider.main(keyword,num)<br /> #spider.Thread_main(keyword, num)<br /><br />
版本二功能
#关键词百度搜索结果查询<br />#20191121 by 微信:huguo00289<br /># -*- coding: UTF-8 -*-<br /><br />import requests,time<br />import urllib.parse<br />from bs4 import BeautifulSoup<br />from fake_useragent import UserAgent<br />import json<br /><br /><br />def ua():<br /> ua = UserAgent()<br /> return ua.random<br /><br />headers={<br /> 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',<br /> 'Accept-Encoding': 'gzip, deflate, br',<br /> 'Accept-Language': 'zh-CN,zh;q=0.9',<br /> 'Cache-Control': 'max-age=0',<br /> 'Connection': 'keep-alive',<br /> 'Cookie':Cookie ,<br /> 'Host': 'www.baidu.com',<br /> 'Referer': 'https://www.baidu.com/?tn=48021271_6_hao_pg',<br /> 'Upgrade-Insecure-Requests': '1',<br /> 'User-Agent':ua()<br /> #'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',<br />}<br /><br /><br />#获取百度跳转真实网址<br />def get_trueurl(url):<br /> try:<br /> r = requests.head(url, stream=True)<br /> zsurl = r.headers['Location']<br /> except:<br /> zsurl=url<br /> return zsurl<br /><br />#获取网页信息<br />def get_response(url):<br /> """<br /> #代理ip<br /> proxy = '120.83.105.195:9999'<br /> proxies = {<br /> 'http': 'http://' + proxy,<br /> 'https': 'https://' + proxy<br /> }<br /> response=requests.get(url,headers=ua(),proxies=proxies,timeout=10)"""<br /> #response = requests.get(url, headers=ua(),timeout=10)<br /> response = requests.get(url, headers=headers, timeout=10)<br /> print(f'状态码:{response.status_code}')<br /> time.sleep(2)<br /> response.encoding='utf-8'<br /> req=response.text<br /> return req<br /><br />#查询搜索结果<br />def get_bdpm(keyword,num):<br /> """<br /> #转换为utf-8编码<br /> key_word = urllib.parse.quote(keyword)<br /> print(key_word)<br /> """<br /> for i in range(0,int(num)):<br /> print(f'正在查询{i + 1}页搜索结果...')<br /> ym=i * 10<br /> url=f"https://www.baidu.com/s?wd={keyword}&ie=UTF-8&pn={ym}"<br /> #print(url)<br /> req=get_response(url)<br /> #print(req)<br /> soup=BeautifulSoup(req,'lxml')<br /> divs=soup.find('div',id="content_left").find_all('div')<br /> for div in divs:<br /> if 'class="result'in str(div):<br /> try:<br /> pm=div['id']<br /> except:<br /> pm=''<br /> title=div.find('a').get_text()<br /> title=title.strip()<br /> href=div.find('a')['href']<br /> zsurl=get_trueurl(href)<br /> print(pm,title,zsurl)<br /> time.sleep(5)<br /><br /><br /><br /><br /><br /><br /><br />if __name__ == '__main__':<br /> while True:<br /> keyword =input('请输入要查询的关键词:')<br /> num = input('请输入要查询的页码数:')<br /> try:<br /> get_bdpm(keyword,num)<br /> except IndexError as e:<br /> print(e)<br /> print("查询结果失败!")<br />