解决方案: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 />            &#39;Cookie&#39;: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(&#39;//div[@]/h3[@]/a&#39;)<br />        hrefs=req.xpath(&#39;//div[@]/h3[@]/a/@href&#39;)<br />        for h3,href in zip(h3s,hrefs):<br />            h3=h3.xpath(&#39;.//text()&#39;)<br />            h3=&#39;&#39;.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[&#39;Location&#39;]<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&#39;{file_name}_{time.strftime("%Y-%m-%d ", time.localtime())}.xlsx&#39;)  # 创建一个Excel文件<br />        worksheet = workbook.add_worksheet(file_name)<br />        title = [&#39;标题&#39;, &#39;网址&#39;]  # 表格title<br />        worksheet.write_row(&#39;A1&#39;, 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 = &#39;A&#39; + 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&#39;正在查询第{i+1}页百度搜索结果数据..&#39;)<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&#39;正在查询第{i+1}页百度搜索结果数据..&#39;)<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__==&#39;__main__&#39;:<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 />    &#39;Accept&#39;: &#39;text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3&#39;,<br />    &#39;Accept-Encoding&#39;: &#39;gzip, deflate, br&#39;,<br />    &#39;Accept-Language&#39;: &#39;zh-CN,zh;q=0.9&#39;,<br />    &#39;Cache-Control&#39;: &#39;max-age=0&#39;,<br />    &#39;Connection&#39;: &#39;keep-alive&#39;,<br />    &#39;Cookie&#39;:Cookie ,<br />    &#39;Host&#39;: &#39;www.baidu.com&#39;,<br />    &#39;Referer&#39;: &#39;https://www.baidu.com/?tn=48021271_6_hao_pg&#39;,<br />    &#39;Upgrade-Insecure-Requests&#39;: &#39;1&#39;,<br />    &#39;User-Agent&#39;:ua()<br />    #&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36&#39;,<br />}<br /><br /><br />#获取百度跳转真实网址<br />def get_trueurl(url):<br />    try:<br />        r = requests.head(url, stream=True)<br />        zsurl = r.headers[&#39;Location&#39;]<br />    except:<br />        zsurl=url<br />    return zsurl<br /><br />#获取网页信息<br />def get_response(url):<br />    """<br />    #代理ip<br />    proxy = &#39;120.83.105.195:9999&#39;<br />    proxies = {<br />        &#39;http&#39;: &#39;http://&#39; + proxy,<br />        &#39;https&#39;: &#39;https://&#39; + 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&#39;状态码:{response.status_code}&#39;)<br />    time.sleep(2)<br />    response.encoding=&#39;utf-8&#39;<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&#39;正在查询{i + 1}页搜索结果...&#39;)<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,&#39;lxml&#39;)<br />        divs=soup.find(&#39;div&#39;,id="content_left").find_all(&#39;div&#39;)<br />        for div in divs:<br />            if &#39;class="result&#39;in str(div):<br />                try:<br />                    pm=div[&#39;id&#39;]<br />                except:<br />                    pm=&#39;&#39;<br />                title=div.find(&#39;a&#39;).get_text()<br />                title=title.strip()<br />                href=div.find(&#39;a&#39;)[&#39;href&#39;]<br />                zsurl=get_trueurl(href)<br />                print(pm,title,zsurl)<br />        time.sleep(5)<br /><br /><br /><br /><br /><br /><br /><br />if __name__ == &#39;__main__&#39;:<br />    while True:<br />        keyword =input(&#39;请输入要查询的关键词:&#39;)<br />        num = input(&#39;请输入要查询的页码数:&#39;)<br />        try:<br />            get_bdpm(keyword,num)<br />        except IndexError as e:<br />            print(e)<br />            print("查询结果失败!")<br />

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线