css选择器:
#container:选择id为container的节点
.container:选取所有class包含container的节点
Li a : 选取所有li下的所有a节点
Ul + p :选择ul 后面的第一个p元素
Div#container>ul :选取id为container的div的第一个ul子元素
Ul ~ P :选取与ul相邻的所有p元素
a[title] :选取所有有title属性的a元素
a[href=’http://jobbole.com’]:选取所有href属性为jobbole.com值的a元素
a[href*=”jobole”]:选取所有href属性包含的jobbole的a元素;
a[href^=”http”] : 选取所有href属性值为http开头的a元素;
a[href$=”.jpg”];选取所有href属性值以.jpg结尾的a元素;
input[type=radio]:checked 选择选中的radio的元素;
div:not(#container): 选取所有id非container的div属性;
li:nth-child(3):选取第三个li元素;
tr: nth-child(2n):选取第偶数个tr;
案例:
Css的应用:
提取title:*(用到伪类选择器)
Tiltle = response.css(".entry-header h1::text").extract()
Create_data=response.css(".entry-meta-hide-on-mobile::text").extract()[0].strip().replace(“·”,” ”)
Comment_num = response.css("a[href='#article-comment'] span::text").extract()[0];
Content = response.css("div.entry").extract()[0]
Tags=response.css(".entry-meta-hide-on-mobile a::text").extract()[0]
###解析列表页中的所有文章url后交给scrapy下载后进行解析;
提取文章所有url后如何交给scrapy,调用自定义的解析函数,再下载,将利用scrapy中http中的的request类;
Request()参数设置;
(不是所有网站提取到的url是完整的),利用urllib中的parse方法构造url
from urllib import parse
Request(url = parse.urljoin(response.url,post_url
),callback=self.prase())
利用yield关键字交于scrapy下载;
###用到伪类选择器的attr()方法;
###Id选择器唯一则用#定位;
post_urls = response.css("#archive .floated-thumb .post-thumb a::attr(href)").extract()
for post_url in post_urls:
print(post_url)