python+selenium+headless chrome完成对信息的采集

写完记录一下,看着《python网络数据采集》写的,踩了一堆坑……索幸踩着踩着习惯了……

思路

一开始的idea是通过输入番号,将番号输入指定搜索引擎,返回搜索引擎搜索到的第一页十个信息,翻页处理这里没有加(主要是个人觉得十个信息也够了)。

功能完整的包括了搜索返回信息并且将信息,以搜索信息为名的txt文件存储到当前目录(相对路径)。

直接上代码(相关网址已经用URL代替,这个还是不要太直接的好……):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import urllib.parse
import re
import time
import os,sys

Search_item = input("Enter what you want(Enter 'out' is exit):")
while Search_item != 'out':
    if Search_item == 'out':
        exit(0)
    print("Please wait...")

    option = webdriver.ChromeOptions()
    option.add_argument("headless")
    option.add_argument('UTF-8')
    driver = webdriver.Chrome(chrome_options=option)
    driver.get(URL+Search_item)

    baseUrl = driver.find_elements_by_xpath("//div[@class='search-item']/div[1]/h3/a[@href]")
    if baseUrl:
        pass
    else:
        print("Failed!")
        print("————————————")
        Search_item = input("Enter what you really want(Enter 'out' is exit):")
        continue

    txtFile = os.open("bt"+Search_item+'.txt', os.O_RDWR|os.O_CREAT)

    # 前面driver生成的session,在再次进行driver操作的时候,会刷新,旧的数据无法再次使用
    # 在此就先把session所指向的链接数据先以str的形式转存数组,后期对数组进行调用就行了
    url = []
    for b in baseUrl:
        url.append(b.get_attribute('href'))
    for a in url:
        driver.get(a)
        os.write(txtFile, bytes('\n'+'title:'+driver.find_element_by_xpath("//*[@id='wall']/h2").text, 'UTF-8'))
        os.write(txtFile, bytes('\n'+'link:magnet:?xt=urn:btih:'+a[28:-5], 'UTF-8'))
        os.write(txtFile, bytes('\n'+'————————————', 'UTF-8'))

    os.close(txtFile)

    #driver.get(baseUrl)
    driver.close()
    Search_item = input("Enter what you want(Enter 'out' is exit):")

起初是用phantomJS写的,后来发现这个软件容易报错,而且慢,请教了大神后,得知是已经不再运营了,就换成了headless chrome。windows不能直接下载headless chrome,因此在此使用的是正常的chrome。

我需要从搜索页面抓取前十个标题链接,发现都在“div class=’search-item“模块下,xpath就选择了“//div[@class=’search-item’]/div[1]/h3/a[@href]”。

头文件可能引用的有点多,因为改了很多版本代码,用了较多工具写过,最后选择保留selenium+headless chrome版本,因为目标网站是ajax动态网站,用这个比较方便。(其实是写完后懒地删了)

这里有一个问题,我写了很久没有解决,就是磁力链接的获取,始终会少一位。但是在网站上,可见的链接是完整有效的,后来发现在对应的网址链接中,包含了完整的磁力链接内的字符串后,选择了对网址字符串进行切片操作并加上磁力链接前缀进行存储。

个人觉得爬取网站也基本都可以这么写了,套一套再修改一下……

最后写一句,具体网址具体调整,大概就是这样了。

大神路过的话,希望能够指点一下。

你可能感兴趣的:(python爬虫)