搜索指定网站内容(Python脚本使用模块脚本的内容和对应的URL )

优采云 发布时间: 2022-01-12 06:19

  搜索指定网站内容(Python脚本使用模块脚本的内容和对应的URL

)

  本博客内容仅供Python学习交流。

  

  如上图,在豆瓣我要爬的群里,所有的群标题和对应的与意大利留学内容相关的网址。这里我使用 Python 脚本以两种方式爬取我需要的内容。两个脚本如下:

  使用 selenium 模块进行爬网

  # -*- coding: utf-8 -*-

# python3.6

import csv

import time

from bs4 import BeautifulSoup

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

class DouBan:

def __init__(self, search_field):

self.search_filed = search_field

self.url = 'https://www.douban.com/search?cat=1019&q={}'.format(self.search_filed)

self.result_data = {}

def get_data(self):

driver = webdriver.Chrome()

driver.get(self.url)

wait = WebDriverWait(driver, timeout=2, poll_frequency=0.5)

# 如果不使用向url添加搜索字段的方式,也可以使用以下两行注释代码的这种方式,让selenium自动输入内容进行搜索

# driver.find_element_by_xpath("//input[@placeholder='搜索你感兴趣的内容和人']").send_keys('意大利留学'.decode('utf-8'))

# driver.find_element_by_xpath("//input[@placeholder='搜索你感兴趣的内容和人']").send_keys(Keys.RETURN)

# 通过selenium模拟浏览器向下不断翻页并自动点击‘显示更多’按钮,让网页加载显示搜索到的全部网页数据

while True:

try:

time.sleep(1)

wait.until_not(EC.presence_of_element_located((By.NAME, "style")))

driver.find_element_by_link_text("显示更多").click()

except:

break

# 将网页全部加载的数据使用bs4模块解析到需要的数据并添加到字典中

response = driver.page_source

soup = BeautifulSoup(response, "html.parser")

result = soup.find_all('div', {'class': 'result'})

for line in result:

title1 = line.div.a['title']

title_url = line.div.a['href']

self.result_data[title1] = title_url

def write_csv(self):

if self.result_data:

line_info = [[i, j] for i, j in self.result_data.items()]

with open('result.csv', 'w', newline='', encoding='utf-8-sig') as csvfile:

writer = csv.writer(csvfile)

writer.writerows(line_info)

else:

print('需要写入的数据为空')

if __name__ == '__main__':

crawl_db = DouBan('意大利留学')

crawl_db.get_data()

crawl_db.write_csv()

  脚本说明:

  由于豆瓣网站使用Ajax技术来展示网页内容,通过使用selenium模块模拟鼠标连续向下滑动页面,并自动点击“显示更多”,始终加载所有搜索到的内容网页内容如下图所示。

  

  判断何时加载完所有数据,主要用“显示更多”的代码来判断:

  “显示更多”代码:

  显示更多

  加载所有数据后,“显示更多”代码:

  显示更多

  使用请求模块进行抓取

  脚本说明:

  使用Chrome浏览器分析请求url参数:

  

  从上面的截图可以看到url的请求参数。经过多次请求,发现有3个可变参数,分别是q、start、cat。其中q为搜索字段值,这里是我要搜索的“留学意大利”,开始显示内容的偏移量一次叠加20,默认从0开始,cat为搜索类别,这里是团体。使用urlencode()方法将这三个参数转换为URL的get请求参数,然后使用requests模块的get方法请求URL的内容。

  最后一次爬取的内容被写入 csv 文件。部分结果如下所示:

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线