学习scrapy的使用(二)
1.Xpath 表达式
效率高,但是功能没有正则表示式强大。一般选择正则表达式。不能解决就用正则表达式。
xpath表达式:
/ 逐层提取
/html/head/title
实例:
text() 提取标签下的文本
/html/head/title/text()
//标签名** 提取所有**的标签
//div
//标签名[@数学=‘属性值‘] 提取属性为XX的标签
@属性名 代表取某个属性
提取div中
针对用浏览器的获取某个属性值用get_attribute(‘src’)
2 BeautifulSoup
from bs4 imort BeautifulSoup as bs
import urllib.request
data=urllib.request.urlopen(网址).read().decode("utf8“,“ignore”)
bs1=bs(data)
格式化输出,
bs1.prettify()
获取标签:bs对象.标签名
bs1.title
#获取
3.例子
from selenium import webdriver
import time
chromedriver ="C:\\Users\\陈亚豪\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe"
# browser = webdriver.Chrome()
browser = webdriver.Chrome(chromedriver)
browser.get("http://www.baidu.com")
browser.find_element_by_xpath('//*[@id="kw"]').clear()
browser.find_element_by_xpath('//*[@id="kw"]').send_keys("爬虫")
browser.find_element_by_xpath('//*[@id="su"]').click()
time.sleep(20)
browser.close()
这里我们通过三种不同的方式去获取响应的元素,第一种是通过id的方式,第二个中是CSS选择器,第三种是xpath选择器,结果都是相同的。
这里列举一下常用的查找元素方法:
find_element_by_name
find_element_by_id
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
from selenium import webdriver
import time
chromedriver ="C:\\Users\\XX\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe"
driver = webdriver.Chrome(chromedriver)
driver.get("https://translate.google.cn/#view=home&op=translate&sl=zh-CN&tl=vi")
f=open("11.txt","r",encoding="utf8")
f1=open("fanyi.txt","a+",encoding="utf8")
ci=0
for word in f.readlines():
word = word.strip()
try:
text_dummy = driver.find_element_by_class_name('tlid-source-text-input')
text_dummy.clear()
text_dummy.send_keys(word)
time.sleep(2)
text_translation = driver.find_element_by_xpath(
'//span[@class="tlid-translation translation"]/span').text
print("当前是第%s个词语当前词为%s"%(ci,word))
f1.write(word+" "+text_translation+"\n")
ci+=1
f1.flush()
except:
print("error")
continue
f.close()
f1.close()
driver.close()