from seleniumimport webdriver
import requests
from bs4import BeautifulSoup
import csv
import ssl
import re
ssl._create_default_https_context = ssl._create_unverified_context
def get_newURL(surname):
browser = webdriver.PhantomJS(executable_path='/Users/viemaxwei/Downloads/phantomjs-2.1.1-macosx/bin/phantomjs')
browser.get("http://search.library.sh.cn/jiapu/bSearch.htm")
input_str = browser.find_element_by_name('expr')
input_str.send_keys(surname)
browser.find_element_by_xpath('//*[@value="检索"]').click()
browser.switch_to.window(browser.window_handles[1])
# time.sleep(1)
global newurl
newurl = browser.current_url
browser.close()
# return newURL
# browser = webdriver.PhantomJS(executable_path='/Users/viemaxwei/Downloads/phantomjs-2.1.1-macosx/bin/phantomjs')
# browser.get("http://search.library.sh.cn/jiapu/bSearch.htm")
# input_str = browser.find_element_by_name('expr')
# input_str.send_keys("�")
def get_current_data(url):
session = requests.Session()
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5)AppleWebKit 537.36 (KHTML, like Gecko) Chrome",
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"}
html = session.get(url, headers=headers)
html.encoding ="GBK"
html_code = html.text
bs = BeautifulSoup(html_code, "lxml")
content_list = bs.find_all("td")
content_list_1 = bs.find("H3")
global data
data = []
try:
for contentin content_list:
content = content.get_text()
data.append(content)
for iin data:
if i =='' or i =='*' or i ==' ':
data.remove(i)
except:
content = content_list_1
data.append(content)
def get_next_page(new_url):
global browser_1
browser_1 = webdriver.Firefox(executable_path='/Users/viemaxwei/Downloads/geckodriver')
# browser_1 = webdriver.PhantomJS()
browser_1.get(new_url)
browser_1.find_element_by_xpath("//*[@value='下页']").click()
browser_1.switch_to.window(browser_1.window_handles[0])
global url_new
url_new = browser_1.current_url
browser_1.close()
# def close_all_browsers():
# browser.quit()
# browser_1.quit()
with open("/Users/viemaxwei/Downloads/surname.csv", "rt")as sur:
cin = csv.reader(sur)
surname = [ifor iin cin]
surname_dict =dict(surname)
surname_set = {}
for tin surname_dict:
get_newURL(surname_dict[t] +"氏")
print("现在自动检索" + surname_dict[t] +"氏数据")
print("-------------------------------------")
get_current_data(newurl)
all_data = data.copy()
# 计算需要爬取的网页数
total = all_data[1]
pattern = re.compile('[0-9]+')
match = pattern.search(total)
total_true =int(match.group())
sheets = total_true//10 +1
print("正在获取第1页数据... (总共%d页)" % sheets)
get_next_page(newurl)
print("正在获取第2页数据... (总共%d页)" % sheets)
get_current_data(url_new)
all_data.extend(data)
count =2
while True:
try:
get_next_page(url_new)
get_current_data(url_new)
count +=1
print("正在获取第%d的数据... (总共%d页)" % (count, sheets))
all_data.extend(data)
except:
surname_set[surname_dict[t]] = all_data
browser_1.close()
break
print("爬取" + surname_dict[t] +"氏完成 !!!")
print("--------------------------")
continue
上海图书馆-家谱数据库-数据爬虫
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 前言:Realm数据库是基于C++编写的一个不同于SQLite数据库的数据库引擎,是一个可以替代SQLite以及O...
- 最近追电视剧《军师联盟》的空档间,同时追看了以前落下的《新三国》,被一个人的命运深深牵动心弦,这个人就是东汉的末代...