沸腾の鱼 2022-02-13 14:37 采纳率: 71.4%
浏览 70

想做一个网页搜索界面的爬虫,但报错,求解

思路:从搜索界面的elements获取搜索结果目标网页id,得到url列表
问题:1、直接用urllib.request.urlopen获取的html并非elements(“获取网页源代码”和elements不一样)
2、运行如下代码后报错(仅运行了部分代码块)(结果见代码后图片)
3、报错内容显示它甚至打开了同文件夹中其他python代码
期望的最终结果中的网址来自f12-network-response,800ms左右


# coding = utf-8
import selenium
import requests
from lxml import html
from selenium.webdriver import Chrome
from selenium.webdriver.support.select import Select
from selenium.webdriver.chrome.options import Options
import time
import re
import sqlite3
import urllib.error
import urllib.request
from selenium import webdriver
import os
from shutil import copy, rmtree
import random
import xlwt
from bs4 import BeautifulSoup

# chromedriver = r"C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe"
# # 设置浏览器
# os.environ["webdriver.chrome.driver"] = chromedriver
# browser = webdriver.Chrome(chromedriver)

opt = Options()
opt.add_argument('--headless')
opt.add_argument('--disable-gpu')

web = Chrome(options=opt)
url = r'https://www.xuexi.cn/dc12897105c8c496d783c5e4d3b680a2/9a75e290b9cf8cb8fb529a6e503db78d.html?page=1&query=%E4%B9%A1%E6%9D%91%E6%8C%AF%E5%85%B4&program_id=1&search_source=6&_t=1644671322317'

web.get(url)
text = web.page_source  # 得到页面element的html代码
etree = html.etree
tree = etree.HTML(text)
dd = tree.xpath('//*[@id="home"]/div/div[3]/div/div[2]/div[1]/div[1]/a')
ee = web.find_elements_by_xpath('//*[@id="home"]/div/div[3]/div/div[2]/div[1]/div[1]/a').text
print(dd)
print(ee)

img

期望的最终结果(代码+结果):

# coding = utf-8
import re
import sqlite3
import urllib.error
import urllib.request
import xlwt
from bs4 import BeautifulSoup

response = urllib.request.urlopen(
    r"https://search.xuexi.cn/api/search?size=15&hid=StX393CuVYfmJlIVNmTTKKCh7vIUw7Au&page=1&query=%E4%B9%A1%E6%9D%91%E6%8C%AF%E5%85%B4&program_id=1&pub_time=0&_t=1644718290581")  # 获取网页
bb = (response.read().decode('utf-8'))  # 解析网页
aa = re.findall("\d{15}", bb)  # 从网页中找到连续的大于15位的数字即为子页面id
cc = list(set(aa))  # 将获取到id列表去重
baseurl = 'https://www.xuexi.cn/lgpage/detail/index.html'  # 根url
for item in list(cc):
    url = baseurl + '?id=' + item + '&item_id=' + item  # 将获取的id与根url结合形成目标子页面链接
    print(url)

img

  • 写回答

1条回答 默认 最新

  • m0_46578370 2022-02-13 15:37
    关注

    你是不是该py文件同目录下没有chromedriver驱动

    评论

报告相同问题?

问题事件

  • 修改了问题 2月13日
  • 创建了问题 2月13日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境