写完记录一下,看着《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动态网站,用这个比较方便。(其实是写完后懒地删了)
这里有一个问题,我写了很久没有解决,就是磁力链接的获取,始终会少一位。但是在网站上,可见的链接是完整有效的,后来发现在对应的网址链接中,包含了完整的磁力链接内的字符串后,选择了对网址字符串进行切片操作并加上磁力链接前缀进行存储。
个人觉得爬取网站也基本都可以这么写了,套一套再修改一下……
最后写一句,具体网址具体调整,大概就是这样了。
大神路过的话,希望能够指点一下。