虽然之前学过了Python,不过感觉那都是一些皮毛的东西,真正用到Python来爬取东西的时候感觉自己的知识还是不够。
目前阶段所学知识:
1:使用re正则和bs4来获取静态的网页数据
举个小小的例子,我们来获取美团的网页数据。
先导入几个库:
import urllib.request import requests from bs4 import BeautifulSoup
用几行简单的代码:
page = requests.get('http://nn.meituan.com/meishi/') soup2 = BeautifulSoup(page.content,'html.parser') result = soup2.find_all('body') print(result)
然后运行结果如下:
这样就得到了这个美团美食界面的所有可见的信息。
2:利用selenium来获取动态的网页数据,下面的代码是获取淘宝数据的例子
所有的代码如下:
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 from selenium.common.exceptions import TimeoutException from bs4 import BeautifulSoup driver = webdriver.Firefox() wait = WebDriverWait(driver,10) def search(shop=None): print("开始搜索") driver.get('https://www.taobao.com') try: input = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR,'#q')) ) input.send_keys(u'{}'.format(shop)) submits = wait.until( EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')) ) submits.click() get_response() except TimeoutException: return search(shop) #判断当前的的商品加载出来没 def get_response(): wait.until( EC.presence_of_all_elements_located((By.CSS_SELECTOR,'#mainsrp-itemlist .items .item')) ) html = driver.page_source #获取当前网页的源代码 soup = BeautifulSoup(html,'lxml') items = soup.find('div',class_='m-itemlist').find_all('div',class_='item') for item in items: product = { 'image':item.find('div',class_='pic').text, 'price':item.find('div',class_='price g_price g_price-highlight').text, 'num':item.find('div',class_='deal-cnt').text[:-3], 'title':item.find('div',class_='row row-2 title').text, 'location':item.find('div',class_='location').text, } print(product) #print(item) #翻页 def next_page(page): print(u"当前是第{}页".format(page)) intput = wait.until( EC.presence_of_all_elements_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.form > input')) )[0] submit = wait.until( EC.element_to_be_clickable((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > span.btn J_Submit')) ) input.clear() input.send_keys(page) submit.click() wait.until( EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > ul > li.item.active > span'),str(page)) ) get_response() if __name__ == '__main__': shop = input(u'请输入搜索商品的名字:') search(shop) for i in range(2,100): next_page(i)
首先导入必要的库,前两行也是必写的代码。
第一个函数是搜索函数,首先driver.get(),输入框wait.until()等待输入,其次input.send_keys()接受输入,然后用submits点击
第二个函数是得到相应,用driver。page_source得到代码源后用soup解析,将这个
下的源代码标签赋值给item,找到想要的信息并复制它的CSS
最后用主函数输出。
( 由于翻页翻页的代码有些问题就不解释啦。((●'◡'●)) )
运行代码后输入:美食
然后得到如下结果:
这是没有进行数据清洗的数据。
总结:学习python起来还是不简单的,自己也还不够努力,只能靠自己多看看别人的代码和视频,希望接下来的学习能让我我懂得更多。