影院資訊在各渠道都是按城市分類,通過城市id分頁查詢,因此在抓取影院前先抓取城市資訊,城市資訊基本不變,只需抓取一次即可。
貓眼沒有從貓眼找到直接獲取城市列表的api, 所以基於selenium模擬chrome訪問貓眼首頁,獲取首頁html原始碼,然後從html中提取所有城市。
city_mt原始碼:
#儲存貓眼城市資訊
create table `city_lm` (
`id` int(11) unsigned not null,
`g` char(1) not null default '',
`name` varchar(10) not null default '',
`create_time` timestamp not null default current_timestamp,
`update_time` timestamp not null default current_timestamp on update current_timestamp,
primary key (`id`)
) engine=innodb default charset=utf8;
淘票票
同貓眼一樣,淘票票也是基於selenium獲取首頁html原始碼解析出城市資訊。
city_tb原始碼:
#儲存**城市資訊
create table `city_tb` (
`id` int(11) unsigned not null,
`g` char(1) not null default '' commnet '城市分組',
`name` varchar(10) not null default '',
`create_time` timestamp not null default current_timestamp,
`update_time` timestamp not null default current_timestamp on update current_timestamp,
primary key (`id`)
) engine=innodb default charset=utf8;
糯公尺
糯公尺則比較簡單,直接有獲取城市列表的api,但是使用scrapy抓取時需要變換useragent,糯公尺會遮蔽掉基於scrapy agent的抓取。
city_lm原始碼:
#糯公尺影院城市api
#儲存糯公尺城市資訊
create table `city_lm` (
`id` int(11) unsigned not null,
`g` char(1) not null default '' commnet '城市分組',
`name` varchar(10) not null default '',
`create_time` timestamp not null default current_timestamp,
`update_time` timestamp not null default current_timestamp on update current_timestamp,
primary key (`id`)
) engine=innodb default charset=utf8;
城市匹配
城市匹配比較簡單,直接基於name匹配即可。
#儲存匹配後的城市資訊
create table `city` (
`id_mt` int(11) not null,
`id_tb` int(11) not null,
`id_lm` int(11) not null,
`g` char(255) not null,
`name` varchar(10) character set utf8 not null,
`fly` bit(1) not null default b'0',
`create_time` timestamp not null default current_timestamp,
`update_time` timestamp not null default current_timestamp on update current_timestamp,
primary key (`id_mt`)
) engine=innodb default charset=utf8;
#以city_mt為標準,基於name欄位join
replace city(id_mt, id_tb, id_lm, g, name)
select city_mt.id, city_tb.id, city_lm.id, city_mt.g, city_mt.name from city_mt join city_tb on city_mt.name=city_tb.name
join city_lm on city_mt.name=city_lm.name;
xpath案例 全國城市名爬取
usr bin python import requests from lxml import etree 專案需求 解析出所有的城市名稱 if name main headers url page text requests.get url url,headers headers text tre...
單元測試之城市和國家
編寫乙個函式,它接受兩個引數 乙個城市名和乙個國家名,這個函式返回乙個格式為city,country的字串,如santiago,chile,將這個函式儲存在乙個名為city functions.py的模組中。建立乙個名為test cities.py的函式.def get city country c...
Python爬取中國天氣網指定城市天氣
功能 完整 import pandas as pd import requests import re 建立乙個字典儲存中國天氣網城市 def createcitycode fh r text 中國天氣網城市 csv data pd.read csv fh,engine python data da...