【爬虫】根据关键词自动搜索并爬取结果

这篇具有很好参考价值的文章主要介绍了【爬虫】根据关键词自动搜索并爬取结果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

根据关键词自动搜索并爬取网页的信息
网页有两种情况:可以直接获取页数的和不可以直接获取页数的;
两种情况可以采取不同的方法:

情况一:先爬取页数,再爬取每页的数据

# coding=utf-8
import pandas as pd
import urllib
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import csv
import re
import random

option = webdriver.ChromeOptions()
option.add_argument("headless")
# option.binary_location = r"...\chrome.exe"
option.add_argument('blink-settings=imagesEnabled=false')
driver = webdriver.Chrome(executable_path=r"...\chromedriver.exe"
                          , options=option)
head_url = "部分的头部URL+key="
keywords_all = []
keywords = keywords_all[410:444]

keyword_list = []
product_name_list = []
company_name_list = []
company_url_list = []
phone_list = []


def PageNumber(keyword):
    wd = urllib.parse.quote(keyword.encode('gb2312'))
    turn_url = head_url + wd + ';use_cas=0;f=pclist;p=0'
    driver.get(turn_url)
    # print(driver.page_source)
    time.sleep(random.randint(1,3))
    try:
        source = driver.find_element(By.XPATH
                                        ,"//div[@class='gys']/dl/dt/span").text
        reg = re.findall(r".*有(.*)家", source)
        page_number = int(reg[0])
        print("共有",page_number,"条数据")
        return page_number
    except:
        return -1

def GetResult(keyword, page):
    wd = urllib.parse.quote(keyword.encode('gb2312'))
    turn_url = head_url + wd + ';use_cas=0;f=pclist;p=' + str(page)
    print(turn_url)
    try:
        driver.get(turn_url)
        time.sleep(random.randint(2,4))
        list = driver.find_elements(By.XPATH
                                , "//div[@class='gys']/dl/dd/form")
        for l in list:
            company = l.find_element(By.XPATH, "./table/tbody/tr/td/a").text
            print(company)
            company_name_list.append(company)
            company_url = l.find_element(By.XPATH,"./table/tbody/tr/td/a[1]").get_attribute('href')
            print(company_url)
            company_url_list.append(company_url)
            phone = l.find_element(By.XPATH, "./table/tbody/tr[2]/td[2]").text
            print(phone)
            phone_list.append(phone)
            print(keyword)
            keyword_list.append(keyword)
    except:
        print('get不到页面')
for i in keywords:
    this_page = 0
    page_number = int((PageNumber(keyword=i))/10)
    if page_number == 0:
        try:
            GetResult(keyword=i, page=0)
        except:
            continue
    elif page_number == -1:
        print(i,'无数据')
    else:
        for p in range(0,page_number):
            try:
                GetResult(keyword=i, page=p)
            except:
                continue
data_list = []
for a, b, c, d in zip(keyword_list, company_name_list, company_url_list, phone_list):
    x = {}
    x['keyword'] = a
    x['company_name'] = b
    x['company_url'] = c
    x['phone'] = d
    data_list.append(x)
# print(data_list)
with open(r"###.csv", 'w', newline='', encoding='UTF-8') as f_c_csv:
    writer = csv.writer(f_c_csv)
    writer.writerow(['keyword' ,'company_name', 'company_url', 'phone'])
    for nl in data_list:
        writer.writerow(nl.values())
print("写入完成!")

情况二:无法爬取到页码数,只能换页爬取的文章来源地址https://www.toymoban.com/news/detail-522755.html

# coding=utf-8
import urllib
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import csv
import random
import pandas as pd

option = webdriver.ChromeOptions()
option.add_argument("headless")
# option.binary_location = r"...\chrome.exe"
option.add_argument('blink-settings=imagesEnabled=false')
driver = webdriver.Chrome(executable_path=r"...\chromedriver.exe, options=option)
head_url = "部分头url+keyword="
keywords_all = []
keywords = keywords_all[400:444]

keyword_list = []
product_name_list = []
company_name_list = []
company_url_list = []
mobilephone_list = []
telephone_list = []

def NextPage(keyword, page):
    wd = urllib.parse.quote(keyword.encode('utf-8'))
    if page == 0:
        turn_url = head_url + wd
    else:
        turn_url = head_url + wd + "&p="+ str(page)
    print(turn_url)
    driver.get(turn_url)
    time.sleep(random.randint(1,3))
    list = driver.find_elements(By.XPATH
                                    ,"//div[@class='lc-grid-list']//div[@class='container']//div[@class='grid-body']//div[@class='lc-main']//div[@class='lc-products-wrap']//div[@class='pro-item clearfix ']")
    return len(list)

def GetResult(keyword, page):
    wd = urllib.parse.quote(keyword.encode('utf-8'))
    if page == 0:
        turn_url = head_url + wd
    else:
        turn_url = head_url + wd + "&p=" + str(page)
    driver.get(turn_url)
    time.sleep(random.randint(3,5))
    try:
        list = driver.find_elements(By.XPATH
                                    , "//div[@class='lc-grid-list']//div[@class='container']//div[@class='grid-body']//div[@class='lc-main']//div[@class='lc-products-wrap']//div[@class='pro-item clearfix ']")
        for l in list:
            product_name = l.find_element(By.XPATH, "./div[@class='pro-info']/div[@class='intro-box']/div[@class='tt']/a").text
            print(product_name)
            product_name_list.append(product_name)
            try:
                telephone = l.find_element(By.XPATH, "./div[@class='pro-info']/div[@class='basic-box']/div[@class='info']/dl/dd[2]").text
                print(telephone)
                telephone_list.append(telephone)
                mobilephone = l.find_element(By.XPATH,
                                           "./div[@class='pro-info']/div[@class='basic-box']/div[@class='info']/dl/dd[3]").text
                print(mobilephone)
                mobilephone_list.append(mobilephone)
            except:
                continue
            company = l.find_element(By.XPATH,
                                       "./div[@class='pro-info']/div[@class='basic-box']/div[@class='title']/em").text
            print(company)
            company_name_list.append(company)
            for link in l.find_elements(By.XPATH,"./div[@class='pro-info']/div[@class='basic-box']/div[@class='title']/em/a"):
                company_url = link.get_attribute('href')
                print(company_url)
                company_url_list.append(company_url)
            print(keyword)
            keyword_list.append(keyword)
    except:
        print("爬取失败")

for i in keywords:
    this_page = 0
    while NextPage(keyword = i, page = this_page) > 19:
        GetResult(keyword=i, page=this_page)
        this_page = this_page + 1
    if NextPage(keyword = i, page = this_page) < 20:
        GetResult(keyword=i, page=this_page)

data_list = []
for a, b, c, d, e, f in zip(keyword_list, product_name_list, company_name_list, company_url_list, mobilephone_list, telephone_list):
    x = {}
    x['keyword'] = a
    x['product_name'] = b
    x['company_name'] = c
    x['company_url'] = d
    x['mobilephone'] = e
    x['telephone'] = f
    data_list.append(x)
# print(data_list)

with open("###.csv", 'w', newline='', encoding='UTF-8') as f_c_csv:
    writer = csv.writer(f_c_csv)
    writer.writerow(['keyword', 'product_name','company_name', 'company_url', 'mobilephone', 'telephone'])
    for nl in data_list:
        writer.writerow(nl.values())
print("写入完成!")

到了这里,关于【爬虫】根据关键词自动搜索并爬取结果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Python编写搜索引擎关键词排名监测爬虫

    目录 1. 了解排名监测的重要性 2. 选择合适的搜索引擎 3. 构建排名监测爬虫

    2024年02月09日
    浏览(42)
  • (已解决)关键词爬取百度搜索结果,返回百度安全验证,网络不给力,请稍后重试,无法请求到正确数据的问题

    已解决,使用进行百度搜索,然后爬取搜索结果,请求数据后,返回的是百度安全验证,网络不给力,请稍后重试。无法请求到正确数据。且尝试在header中增加Accept参数还是不行。      在学习过程中,写了一小段练习用的爬取程序,获取百度搜索后的结果,代

    2024年02月08日
    浏览(45)
  • (已解决)关键词爬取百度搜索结果,返回百度安全验证,网络不给力,请稍后重试,无法请求到正确数据的问题(2023最新)

    已解决,使用进行百度搜索,然后爬取搜索结果,请求数据后,返回的是百度安全验证,网络不给力,请稍后重试。无法请求到正确数据。且尝试在header中增加Accept参数还是不行。      在学习过程中,写了一小段练习用的爬取程序,获取百度搜索后的结果,代

    2024年02月17日
    浏览(25)
  • 长尾关键词挖掘软件-免费的百度搜索关键词挖掘

    嗨,大家好!今天,我想和大家聊一聊长尾挖掘工具。作为一个在网络世界里摸爬滚打多年的人,我对这个话题有着一些个人的感悟和见解,希望能与大家分享。 首先,让我坦白一点,长尾挖掘工具对于我来说真是救命稻草。在我刚开始做网站优化和内容创作的

    2024年02月09日
    浏览(71)
  • AI画画软件手机版,根据关键词进行创作

    ​ “  兄弟们,哈喽呀,我是开源老王 今天分享的开源项目是:  一个能够根据绘画的软件-AI画画 ” AI画画软件是一款革命性的软件,它可以让你使用人工智能技术来创作出精美的图画。 它可以自动生成图像,并且可以根据你的要求调整图像的风格,让你的作品更

    2024年02月09日
    浏览(32)
  • Elasticsearch的关键词搜索

    返回给前端的实体类 es对应的实体类 前端传递的搜索参数实体类 controller层 service层接口 service实现类 Springboot启动类

    2023年04月08日
    浏览(38)
  • item_search-ks-根据关键词取商品列表

    一、接口参数说明: item_search-根据取商品列表,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/ks/item_search 名称 类型 必须 描述 key String 是 调用key(http://o0b.cn/iimiya) secret String 是 调用密钥 api_name String 是 API接口名

    2024年02月14日
    浏览(32)
  • 关键词组合工具-自动关键词挖掘组成关键词软件免费

    组合工具,今天给大家分享一款免费的挖掘工具。自动挖掘流量,过滤无效。自动组成,组成标题。以及自动采集文章。详细参考图片 不少的网站能在相关的搜索引擎呈现的话,组合工具普通都会被这个搜索引擎所收录,不然也

    2023年04月08日
    浏览(44)
  • VIM统计搜索关键词命令

    :%s/.//gn        统计字符数 :%s/i+//gn    统计单词数 :%s/^//n           统计行数 :%s/keyword//g      统计任何地方出现的 \\\"keyword\\\"   :%s/keyword//gn    统计任何地方出现的 \\\"keyword\\\" :%s/keyword/ :这部分是 Vim 的替换命令的开头。:%s 表示在整个文件范围内进行替换操作。keyword 是要查

    2024年02月09日
    浏览(39)
  • X书关键词协议搜索

    搜索接口中的其他java层加密,详细见: https://codeooo.blog.csdn.net/article/details/122986633

    2024年02月16日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包